单引号JS encodeuri与PHP rawurlencode

时间:2012-04-16 01:21:52

标签: php rawurl

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

有一件事我注意到,为什么PHP将单引号转义为%27,而JS的encodeuricomponent使它像它一样离开?

在PHP中真的有一个函数实际上和JS一样吗?

1 个答案:

答案 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。