我正在尝试使用cURL模仿AJAX在PHP中发出的POST请求。
有一件事我注意到,为什么PHP将单引号转义为%27
,而JS的encodeuricomponent使它像它一样离开?
在PHP中真的有一个函数实际上和JS一样吗?
答案 0 :(得分:1)
您不会找到不编码单引号的PHP函数。原因是PHP更严格地遵守RFC 3986,包括单引号。
RFC 3986
保留!, ', (, ), and *
等特殊字符。
URI包括由
分隔的组件和子组件 “保留”集中的字符。这些字符称为
“保留”,因为它们可能(或可能不)被定义为分隔符 通用语法,每种方案特定的语法,或由 URI的解除引用算法的特定于实现的语法 如果URI组件的数据与保留的数据发生冲突 字符作为分隔符的目的,那么冲突的数据必须是 在URI形成之前进行百分比编码。reserved = gen-delims / sub-delims
gen-delims =“:”/“/”/“?” /“#”/“[”/“]”/“@”
sub-delims =“!” /“$”/“&” /“'”/“(”/“)” /“*”/“+”/“,”/“;” /“=”
如果你想匹配php并用js编码的单引号你可以使用这样的函数。
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, escape);
}
为什么你不需要编码呢?它应该仍然适用于CURL。