Delphi URL编码单引号字符?

Delphi URL编码单引号字符?,delphi,urlencode,delphi-xe8,Delphi,Urlencode,Delphi Xe8,对于URL编码/解码,建议使用Delphi XE7中的TNetEncoding 因此,在Delphi XE8中,我使用以下代码作为示例: uses System.NetEncoding; ... edtEncodedURL.Text := TNetEncoding.URL.Encode('SetFont(''Arial'',15)'); 结果如下: SetFont('Arial'%2C15) 但是,这不会对单引号字符进行编码,正如上面的示例所示 此外,在“自己尝试”部分,字符串SetFon

对于URL编码/解码,建议使用Delphi XE7中的
TNetEncoding

因此,在Delphi XE8中,我使用以下代码作为示例:

uses
  System.NetEncoding;
...
edtEncodedURL.Text := TNetEncoding.URL.Encode('SetFont(''Arial'',15)');
结果如下:

SetFont('Arial'%2C15)

但是,这不会对单引号字符进行编码,正如上面的示例所示

此外,在“自己尝试”部分,字符串
SetFont('Arial',15)
的URL编码为:

SetFont%28%27Arial%27%2C15%29


那么,是否有一种方法可以在Delphi XE8中对单引号字符进行URL编码?

这似乎适用于问题中提出的目的:

uses
  System.NetEncoding,
  REST.Utils;

procedure TForm1.btnURLEncodeClick(Sender: TObject);
begin
  edtEncodedURL.Text := REST.Utils.URIEncode(edtOriginalURL.Text);
end;

procedure TForm1.btnURLDecodeClick(Sender: TObject);
begin
  edtDecodedURL.Text := TNetEncoding.URL.Decode(edtEncodedURL.Text);
end;

这似乎符合问题中提出的目的:

uses
  System.NetEncoding,
  REST.Utils;

procedure TForm1.btnURLEncodeClick(Sender: TObject);
begin
  edtEncodedURL.Text := REST.Utils.URIEncode(edtOriginalURL.Text);
end;

procedure TForm1.btnURLDecodeClick(Sender: TObject);
begin
  edtDecodedURL.Text := TNetEncoding.URL.Decode(edtEncodedURL.Text);
end;

明确允许单引号字符在URL中保持未编码状态,而且由于Delphi转换单元似乎基于此规范,我猜答案是否定的。
REST.Utils.URIEncode
似乎完成了这项工作:它从
SetFont%28%27Arial%27%2C15%29
获得
SetFont('Arial',15)
TNetEncoding.URL.Decode
使用所有编码字符执行此任务:它正确解码
SetFont%28%27Arial%27%2C15%29
返回到
SetFont('Arial',15)
@user1580348:不太正确。任何字符都可以被编码,因此
Decode()
必须考虑到这一点。但是只需要对某些字符进行编码,
Encode()
说明了这一点(大部分情况下,它不考虑上下文,因为有些字符需要在URL的特定部分进行编码,但在其他部分可能没有编码)。@500 InternalServerError:RFC 1738已过时,请参阅[RFC 3986]()相反明确允许单引号字符在URL中保持未编码状态,并且由于此规范是Delphi转换单元的基础,我猜答案是否定的。
REST.Utils.Urinecode
似乎完成了工作:它从
SetFont%28%27Arial%27%2C15%29
获得
SetFont('Arial',15)
TNetEncoding.URL.Decode
使用所有编码字符执行此任务:它正确解码
SetFont%28%27Arial%27%2C15%29
返回到
SetFont('Arial',15)
@user1580348:不太正确。任何字符都可以被编码,因此
Decode()
必须考虑到这一点。但是只需要对某些字符进行编码,
Encode()
说明了这一点(大部分情况下,它不考虑上下文,因为有些字符需要在URL的特定部分进行编码,但在其他部分可能没有编码)。@500 InternalServerError:RFC 1738已过时,请参阅[RFC 3986]()相反