【问题标题】:Ajax post breaks with special characters带有特殊字符的 Ajax 帖子中断
【发布时间】:2018-07-22 15:50:35
【问题描述】:

我正在尝试将 textarea 的值传递给 php 页面,然后进行处理并添加到 SQL 数据库中。

我希望文本区域能够支持特殊字符。

一切正常,直到我将此字符串放入文本区域并发布:

JΛ̊KE#2@#&($^@%#@#%))$&@("""

我收到一个 501 Not Implemented 错误。

现在,当我将某些 PHP 代码粘贴到文本区域时(不是为了运行,纯粹是为了保存为字符串),我收到 403 Forbidden 错误。

为什么文本区域的值会影响错误码?

目前,paste.php 文件没有代码,因此我可以尝试了解错误的来源。我确定错误来自 ajax 帖子。我在网上到处查看,但找不到如何使字符串安全发布。在这种情况下,encodeURIComponent 似乎不起作用。

这是按下按钮的 JS:

var note = $("#note").val();
var dataString = encodeURIComponent(note);
$.ajax({
  type: "POST",
  url: "php/paste.php",
  data: JSON.stringify({
    paste: dataString
  }),
  dataType: 'text',
  contentType: "application/json; charset=utf-8",
  success: function(msg) {
    alert(msg);
    console.log(msg)
  },
  error: function(ts) {
    alert(ts.responseText)
  }
});

【问题讨论】:

    标签: javascript php jquery ajax post


    【解决方案1】:

    尝试添加这个

    Content-Type: application/x-www-form-urlencoded
    

    【讨论】:

    • 谢谢,成功了!这支持所有字符吗?
    • 实际上,这适用于我在上面遇到问题的字符,但是当我在 textarea 中粘贴一些 PHP 代码时,出现 403 禁止错误。
    【解决方案2】:

    我们需要在数据上使用这个函数。

    function encode_utf8(s) {
         return unescape(encodeURIComponent(s));
    }
    

    将内容类型更改为

    ContentType: "application/x-www-form-urlencoded; charset=UTF-8"
    

    对于踢球者,将其添加到我的 .htaccess 文件中:

    <IfModule mod_security.c>
     SecFilterEngine Off
     SecFilterScanPOST Off
    </IfModule>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-10-06
      相关资源
      最近更新 更多