我通過(guò)AJAX發(fā)布一個(gè)表單字段的內(nèi)容到PHP腳本,并使用JavaScript來(lái)轉(zhuǎn)義(field_contents)。問(wèn)題是任何加號(hào)都被去掉了,取而代之的是空格。我怎么能安全地“編碼”加號(hào),然后適當(dāng)?shù)亍敖獯a”它在PHP方面?
在JavaScript中試試:
encodeURIComponent()
PHP中:
urldecode($_POST['field']);
在JS和PHP中使用encodeuriccomponent(),你應(yīng)該會(huì)收到正確的值。
注意:當(dāng)您在PHP中訪問(wèn)$_GET、$_POST或$_REQUEST時(shí),您正在檢索已經(jīng)解碼的值。
例子:
在你的JS中:
// url encode your string var string = encodeURIComponent('+'); // "%2B" // send it to your server window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
在你的服務(wù)器上
echo $_GET['string']; // "+"
只有原始的HTTP請(qǐng)求包含url編碼的數(shù)據(jù)。
對(duì)于GET請(qǐng)求,您可以從URI中檢索它。$_SERVER['REQUEST_URI']或$_SERVER['QUERY_STRING']。對(duì)于urlencoded POST, file_get_contents('php://stdin')
注:
Decode()僅適用于單字節(jié)編碼的字符。它不適用于整個(gè)UTF-8范圍。
eg:
text = "\u0100"; // ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80"
Note: "%C4%80"
is equivalent to: escape('\xc4\x80')
這是在UTF-8中表示ā的字節(jié)序列(\xc4\x80)。因此,如果您使用encodeuriccomponent(),您的服務(wù)器端必須知道它正在接收UTF-8。否則PHP會(huì)打亂編碼。