Heim  >  Fragen und Antworten  >  Hauptteil

AJAX POST und das Pluszeichen (+) – wie kodiert man es?

Ich poste den Inhalt eines Formularfelds über AJAX an ein PHP-Skript und maskiere ihn mit JavaScripts Escape(field_contents). Das Problem besteht darin, dass alle Pluszeichen entfernt und durch Leerzeichen ersetzt werden. Wie kann ich das Pluszeichen sicher „kodieren“ und auf der PHP-Seite richtig „dekodieren“?

P粉116654495P粉116654495431 Tage vor372

Antworte allen(1)Ich werde antworten

  • P粉087951442

    P粉0879514422023-07-18 14:54:25

    在JS中使用encodeURIComponent(),在PHP中你应该能够正确接收到值。

    注意:当你在PHP中访问$_GET、$_POST或$_REQUEST时,你获取到的是已经解码过的值。

    例子

    在你的JS中:

    // 对字符串进行URL编码
    var string = encodeURIComponent('+'); // "%2B"
    // 发送到服务器
    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']。对于URL编码的POST请求,可以使用file_get_contents('php://stdin')。

    注意:

    decode()只适用于单字节编码字符。对于完整的UTF-8范围,它将无效。

    例如:

    text = "\u0100"; // Ā
    // 错误的方式
    escape(text); // %u0100 
    // 正确的方式
    encodeURIComponent(text); // "%C4%80"

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

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

    在JavaScript中尝试:

    encodeURIComponent()

    在PHP中使用:

    urldecode($_POST['field']);

    Antwort
    0
  • StornierenAntwort