1

我正在尝试使用 cURL 在 PHP 中模仿 AJAX 发出的 POST 请求。

我注意到一件事,为什么 PHP 转义单引号,%27而 JS 的 encodeuricomponent 保持原样?

PHP 中真的有一个与 JS 相同的函数吗?

4

1 回答 1

1

您不会找到不对单引号进行编码的 PHP 函数。原因是 PHP 更严格地遵守包含单引号的RFC 3986 。

RFC 3986保留特殊字符,例如!, ', (, ), and *.


URI 包括由“保留”集中的字符分隔的组件和子组件。这些字符被称为
“保留”,因为它们可能(或可能不)被
通用语法、每个特定于方案的语法或
URI 的解引用算法的特定于实现的语法定义为分隔符。
如果 URI 组件的数据与保留
字符作为分隔符的用途发生冲突,则必须在形成 URI 之前对冲突数据进行百分比编码。

保留= gen-delims / sub-delims

gen-delims = ":" / "/" / "?" /“#”/“[”/“]”/“@”

子分隔符=“!” /“$”/“&”/“'”/“(”/“)”/“*”/“+”/“”/“;” /“=”

如果你想匹配 php 并在 js 中编码单引号,你可以使用这样的函数。

function fixedEncodeURIComponent (str) {  
  return encodeURIComponent(str).replace(/[!'()*]/g, escape);  
} 

为什么不需要对其进行编码?它仍应与 CURL 一起使用。

于 2014-02-07T01:38:19.997 回答