【问题标题】:Jquery Ajax escapes strings despite magic_quotes_gpc = off尽管 magic_quotes_gpc = off,但 Jquery Ajax 会转义字符串
【发布时间】:2012-08-31 11:56:03
【问题描述】:

即使magic_quotes_gpc = off 在服务器上,我通过 jQuery Ajax 发布的数据也会被转义。

直接从$_POST(不使用ajax)获取数据工作正常,未转义。但是通过ajax 发送它们会逃脱它们。

$.ajax({
url: 'includes/updateDb.php',
type: 'POST',
data: {
    id:  $this.attr('data-id'),  
    text: $this.html()
}
});

test's -> test\'s

这是功能还是错误?我应该如何进行?通过服务器上的PHP 剥离字符串?

【问题讨论】:

  • 你能提供一个前后数据的例子吗?
  • 它可以通过contentType : "application/json; charset=utf-8" 或您喜欢的任何方式更改,正如 GeenHenk 回答的那样,但我认为他没有明确表示可以更改
  • @rainykeys 我对 JSON 不是很熟悉。这是否意味着数据只会以这种格式发送?因为我无法以这种方式访问​​ $_POST 数据。

标签: jquery ajax escaping magic-quotes-gpc


【解决方案1】:

AJAX 在 jQuery 中默认编码为 application/x-www-form-urlencoded,在你的 PHP 中使用 utf8_decode 来获取未转义的数据

来自jQuery website

contentTypeString
Default: 'application/x-www-form-urlencoded; charset=UTF-8'

【讨论】:

  • 也许我做错了什么,但仅使用 utf8_decode 并没有帮助
  • 你能发布你的 Ajax 函数吗?
  • 尝试用text: $(this).text()text: $(this).val() 切换text: $(this).html()。顺便说一句,this 是什么类型的元素?
  • 是一个contenteditable div,我的ajax函数本身没有问题,数据发送成功。问题是他们逃脱了。
  • 还是.html()做事,比如去掉<script>标签,你试过.text()吗?
【解决方案2】:

现在就像你之前得到的回答一样 jQuery.ajax( url [, settings] ) 仅发送默认值,这意味着它可以更改编码的数据..这有助于在 99% 的情况下防止进一步的问题... 他们使用的默认编码是

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

现在可以更改为任何类型的内容,假设 text/javascript 如果那是您发送的数据类型。 但通常我们试图发送给 php 的是字符串或数组。 这个数组需要以两种语言都能理解的某种方式进行编码...... 现在从 5.2.0 版本开始,php 支持 json 编码,这是从 java 发送数据的最佳方式。 所以你可以向 php 发送一个 json 编码的数字,看起来像这样

{"foo-bar": 12345}

并使用json_decode() 将其变为

$json = '{"foo-bar": 12345}' ; 
$obj = json_decode($json);
print $obj->{'foo-bar'}; // will return 12345

所以正式每个机构只是使用这种格式将数据从 javascript 发送到 php。 为了您自己的缘故,这里是一个 php 代码的示例 假设您发送了用户名和密码之类的内容 数组看起来像这样{"id": "234" , "text" : "helloo,/////text////"}

$posted_data = $_POST['id'];
$parsed_data = josn_decode('$posted_data');
echo $parsed_data -> {'text'}; // should print helloo,/////text////

【讨论】:

  • 首先,在 ajax 函数中将 application/jsontext/javascript 定义为 contentType 时,我无法发布 $_POST 数据。尝试使用$_POST 访问服务器上的数据只会返回错误。
【解决方案3】:

事实证明,尽管phpinfo() 显示magic_quotes_gpc 已关闭,但它们确实已打开。这是一项共享托管功能,导致php.ini 仅影响最顶层的文件夹。我没有意识到这一点。

道歉并感谢您的帮助 -)

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2019-05-30
    • 1970-01-01
    • 2017-04-24
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多