我通过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: "%C4%80"
is equivalent to: escape('\xc4\x80')
这是在UTF-8中表示Ā的字节序列(\xc4\x80)。因此,如果您使用encodeuriccomponent(),您的服务器端必须知道它正在接收UTF-8。否则PHP会打乱编码。