AJAX POST 和加号 ( + ) -- 如何编码?

2022-08-30 05:39:10

我正在通过AJAX将表单字段的内容POS到PHP脚本,并使用JavaScript来.问题在于,任何加号都被去掉了,取而代之的是空格。我如何安全地“编码”加号,然后在PHP端适当地“解码”它?escape(field_contents)


答案 1

在JS和PHP中使用,您应该收到正确的值。encodeURIComponent()

注意:当您访问 时或在 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 请求,您可以从 或 中检索此请求。对于 urlencoded POST,URI. $_SERVER['REQUEST_URI']$_SERVER['QUERY_STRING']file_get_contents('php://stdin')

铌:

decode()仅适用于单字节编码字符。它不适用于完整的 UTF-8 范围。

例如:

text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100 
// correct
encodeURIComponent(text); // "%C4%80"

注意:等效于:"%C4%80"escape('\xc4\x80')

这是以 UTF-8 表示的字节序列 ()。因此,如果您使用服务器端,则必须知道它正在接收UTF-8。否则,PHP 将破坏编码。\xc4\x80ĀencodeURIComponent()


答案 2

在 JavaScript 中,请尝试:

encodeURIComponent() 

和 PHP:

urldecode($_POST['field']);