2012-04-16 21 views
1

我试图模仿由AJAX在PHP中使用cURL发出的POST请求。单引号JS encodeuri vs PHP rawurlencode

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

在PHP中真的有一个函数实际上与JS相同吗?

+0

为什么不建立一个数组并使用'http_build_query()'。 – Brad 2012-04-16 01:23:44

+0

它仍然是%27 – 2012-04-16 11:30:45

回答

1

您不会找到不编码单引号的PHP函数。原因是PHP坚持更严格到RFC 3986其中包括单引号。

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

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

保留= GEN-delims /子delims

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

sub-delims =“!” /“$”/“&”/“'”/“(”/“)” /“*”/“+”/“,”/“; /“=”

如果你想匹配的PHP和单引号编码在JS你可以使用这样的功能。

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

为什么你需要不编码它?它仍应该与CURL一起工作。