2012-04-16 23 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一起工作。