【问题标题】:How can I send the "&" (ampersand) character via AJAX?如何通过 AJAX 发送“&”(和号)字符?
【发布时间】:2012-07-02 21:25:54
【问题描述】:

我想使用 JavaScript 中的 POST 方法发送一些变量和一个字符串。

我从数据库中获取字符串,然后将其发送到 PHP 页面。我正在使用XMLHttpRequest 对象。

问题是字符串多次包含字符&,而PHP中的$_POST数组将其视为多个键。

我尝试将& 替换为\&replace() 函数,但它似乎没有任何作用。

谁能帮忙?

javascript 代码和字符串如下所示:

var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');

var poststr = "act=save";

poststr+="&titlu="+frm.value.titlu;
poststr+="&sectiune="+frm.value.sectiune;
poststr+="&wysiwyg="+wysiwyg_clean;
poststr+="&id_text="+frm.value.id_text;

xmlhttp.open("POST","lista_ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(poststr);

字符串是:

 <span class="style2">&quot;Busola&quot;</span>

【问题讨论】:

    标签: javascript ajax string post xmlhttprequest


    【解决方案1】:

    您可以使用encodeURIComponent()

    它将转义所有不能在 URL 中逐字出现的字符:

    var wysiwyg_clean = encodeURIComponent(wysiwyg);
    

    在本例中,& 符号 &amp; 将替换为转义序列 %26,这在 URL 中有效。

    【讨论】:

    • 这足以安全地转义数据还是“刚好”足以避免 & 号问题?
    • @Sprotenwels,正确编码所有数据就足够了。在这种情况下,您所说的“安全”是什么意思?
    【解决方案2】:

    您可能想使用encodeURIComponent()

    encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B
    

    【讨论】:

      【解决方案3】:

      您需要对 & 符号进行 url 转义。使用:

      var wysiwyg_clean = wysiwyg.replace('&', '%26');
      

      正如 Wolfram 所指出的,encodeURIComponent 可以很好地处理(连同所有其他特殊字符)。

      【讨论】:

        【解决方案4】:

        Ramil Amr 的答案仅适用于 & 字符。如果你还有一些特殊字符,你应该使用PHP的htmlspecialchars()JS的encodeURIComponent()

        你可以写:

        var wysiwyg_clean = encodeURIComponent(wysiwyg);
        

        在服务器端:

        htmlspecialchars($_POST['wysiwyg']);
        

        这将确保 AJAX 将按预期传递数据,而 PHP(以防您将数据插入数据库)将确保数据按预期工作。

        【讨论】:

          【解决方案5】:

          您可以使用此 encodeURIComponent 函数传递参数,因此您不必担心传递任何特殊字符。

          data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') 
          

          var someValue = 'Dolce & Gabbana';
          data: "param1=getAccNos&param2="+encodeURIComponent(someValue)
          

          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

          【讨论】:

            【解决方案6】:

            您可以在 JavaScript 端使用 Base64 编码对字符串进行编码,然后在服务器端使用 PHP (?) 对其进行解码。

            JavaScript (Docu)

            var wysiwyg_clean = window.btoa( wysiwyg );
            

            PHP (Docu):

            var wysiwyg = base64_decode( $_POST['wysiwyg'] );
            

            【讨论】:

              【解决方案7】:

              首选的方法是使用 jQuery 等 JavaScript 库并将您的数据选项设置为对象,然后让 jQuery 进行编码,如下所示:

              $.ajax({
                type: "POST",
                url: "/link.json",
                data: { value: poststr },
                error: function(){ alert('some error occured'); }
              });
              

              如果您不能使用 jQuery(这几乎是当今的标准),请使用 encodeURIComponent

              【讨论】:

                【解决方案8】:
                encodeURIComponent(Your text here);
                

                这将截断特殊字符。

                【讨论】:

                • 这不会为上述答案增加任何价值
                猜你喜欢
                • 2021-05-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-09-30
                • 2014-09-23
                • 2020-08-05
                • 2012-01-10
                相关资源
                最近更新 更多