AJAX POST和Plus Sign(+) - 如何编码?

jal*_*rin 91 javascript ajax post encode decode

我正在通过AJAX将表单字段的内容发布到PHP脚本并使用JavaScript escape(field_contents).问题是任何加号都被剥离并被空格所取代.如何安全地'编码'加号然后在PHP端适当地"解码"它?

buc*_*bay 140

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

注意:当您访问$_GET,$_POST$_REQUEST在PHP中,要检索已经被解码值.

例:

在你的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
Run Code Online (Sandbox Code Playgroud)

在您的服务器上:

echo $_GET['string']; // "+"
Run Code Online (Sandbox Code Playgroud)

它只是包含url编码数据的原始HTTP请求.

对于GET请求,您可以从URI. $_SERVER['REQUEST_URI']或中检索此请求$_SERVER['QUERY_STRING'].对于urlencoded POST,file_get_contents('php://stdin')

注意:

decode()仅适用于单字节编码字符.它不适用于完整的UTF-8系列.

例如:

text = "\u0100"; // ?
// incorrect
escape(text); // %u0100 
// correct
encodeURIComponent(text); // "%C4%80"
Run Code Online (Sandbox Code Playgroud)

注意:"%C4%80"相当于:escape('\xc4\x80')

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

  • 我遇到了加号(+)字符变成空格的问题.在UTF8中其他一切都很好.我很幸运使用encodeURIComponent(JSON.stringify(rootObject)).谢谢! (4认同)

Den*_*ovs 18

在JavaScript中尝试:

encodeURIComponent() 
Run Code Online (Sandbox Code Playgroud)

在PHP中:

urldecode($_POST['field']);
Run Code Online (Sandbox Code Playgroud)

  • encodeURIComponent是正确的答案 - 但是因为它生成URL编码数据而不是HTML编码数据,所以html_entity_encode是关闭的. (7认同)
  • `urldecode` 也很遥远,因为 PHP 会在填充 `$_POST` 之前自动对其进行解码。 (2认同)

Rob*_*len 5

您要查找的十六进制值是 %2B

要在 PHP 中自动获取它,请通过urlencode($stringVal). 然后运行它urldecode($stringVal)以将其恢复。

如果您希望 JavaScript 处理它,请使用 escape( str )

编辑

在@bobince 发表评论后,我做了更多阅读,他是对的。使用encodeURIComponent(str)decodeURIComponent(str)。Escape 不会转换字符,只用\'s转义它们