我在寻找cpp生成器(或delphi)中与PHP RawURLEncode(和Decode)等效的函数。
我使用以下字符串进行测试:_%_&_+_=_ _"_'_a_b_c_d_e_f_g_h_
(我希望仅对var值编码,而不对整个URL编码)
rawurlencode返回:_%25_%26_%2B_%3D_%20_%22_%27_a_b_c_d_e_f_g_h_
我尝试了没有成功:
TIdURI :: ParamsEncode:_%25_&_+_=_%20_%22_'_a_b_c_d_e_f_g_h_
TIdURI :: PathEncode:_%25_&_%2B_=_%20_%22_'_a_b_c_d_e_f_g_h_
TIdURI :: URLEncode:错误:无协议(需要完整路径)
HTTPApp :: HTMLEncode:_%_& amp;_+_=_ _& quot;_'_a_b_c_d_e_f_g_h_
(在“&”之后添加空格)
Wininet :: WinHTTPEncode:在单位中找不到函数
IdGlobal :: URLEncode:在单位中找不到函数
SynaCode :: URLEncode:在XE2中找不到单位
最佳答案
PHP的RawURLEncode
是RFC 3986的实现。我对此进行的网络搜索产生了这个Delphi unit,它声称要实现RFC 3986。
我在您的输入上对其进行了测试:
{$APPTYPE CONSOLE}
uses
System.SysUtils,
UURIEncode in 'UURIEncode.pas';
begin
Writeln(URIEncode('_%_&_+_=_ _"_''_a_b_c_d_e_f_g_h_'));
Readln;
end.
输出为:
_%25_%26_%2B_%3D_%20_%22_%27_a_b_c_d_e_f_g_h_
在
RawURLEncode
的PHP文档中找到成功进行网络搜索的关键,其中指出:根据RFC 3986进行URL编码