首页  >  问答  >  正文

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

我通过AJAX发布一个表单字段的内容到PHP脚本,并使用JavaScript来转义(field_contents)。问题是任何加号都被去掉了,取而代之的是空格。我怎么能安全地“编码”加号,然后适当地“解码”它在PHP方面?

P粉124070451P粉124070451456 天前619

全部回复(2)我来回复

  • P粉010967136

    P粉0109671362023-07-22 00:53:41

    在JavaScript中试试:

    encodeURIComponent()

    PHP中:

    urldecode($_POST['field']);

    回复
    0
  • P粉674999420

    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会打乱编码。

    回复
    0
  • 取消回复