我透過AJAX發布一個表單欄位的內容到PHP腳本,並使用JavaScript來轉義(field_contents)。問題是任何加號都被去掉了,取而代之的是空格。我怎麼能安全地「編碼」加號,然後適當地「解碼」它在PHP方面?
P粉0109671362023-07-22 00:53:41
在JavaScript中試試看:
encodeURIComponent()
PHP中:
urldecode($_POST['field']);
P粉6749994202023-07-22 00:39:11
在JS和PHP中使用encodeuriccomponent(),你應該會收到正確的值。
注意:當您在PHP中存取$_GET、$_POST或$_REQUEST時,您正在檢索已經解碼的值。
範例:
在你的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
在你的伺服器上
echo $_GET['string']; // "+"
只有原始的HTTP請求包含url編碼的資料。
對於GET請求,您可以從URI中檢索它。 $_SERVER['REQUEST_URI']或$_SERVER['QUERY_STRING']。對於urlencoded POST, file_get_contents('php://stdin')
註:
Decode()僅適用於單字節編碼的字元。它不適用於整個UTF-8範圍。
eg:
text = "\u0100"; // Ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80"
Note: "Ā"
is equivalent to: escape('\xc4\x80')
這是在UTF-8中表示Ā的位元組序列(\xc4\x80)。因此,如果您使用encodeuriccomponent(),您的伺服器端必須知道它正在接收UTF-8。否則PHP會打亂編碼。