我在寻找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的RawURLEncodeRFC 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编码

09-07 17:00