我正在尝试使用 cURL 在 PHP 中模仿 AJAX 发出的 POST 请求。
我注意到一件事,为什么 PHP 转义单引号,%27
而 JS 的 encodeuricomponent 保持原样?
PHP 中真的有一个与 JS 相同的函数吗?
您不会找到不对单引号进行编码的 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 一起使用。