我通过AJAX将表单字段的内容发布到PHP脚本,并使用JavaScript来发布escape(field_contents)。问题在于,任何加号都被删除并被空格代替。如何安全地“编码”加号,然后在PHP端适当地“解码”它?
escape(field_contents)
encodeURIComponent()在JS和PHP中使用时,您应该收到正确的值。
encodeURIComponent()
注意:当您访问$_GET,$_POST或$_REQUEST在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']。对于邮递区号,file_get_contents('php://stdin')
URI. $_SERVER['REQUEST_URI']
$_SERVER['QUERY_STRING']
file_get_contents('php://stdin')
注意:
decode()仅适用于单字节编码的字符。它不适用于整个UTF-8范围。
decode()
例如:
text = "\u0100"; // Ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80"
注意:"%C4%80"等同于:escape('\xc4\x80')
"%C4%80"
escape('\xc4\x80')
这是UTF-8 \xc4\x80中表示的字节序列()Ā。因此,如果您使用encodeURIComponent()服务器端,则必须知道它正在接收UTF-8。否则,PHP将破坏编码。
\xc4\x80
Ā