尽管magic_quotes_gpc = off,但Jquery Ajax会转义字符串

时间:2012-08-31 11:56:04

标签: jquery ajax escaping magic-quotes-gpc

即使在服务器上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

这是一个功能还是一个bug?我该怎么办?通过服务器上的PHP删除字符串?

3 个答案:

答案 0 :(得分:0)

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

来自jQuery website

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

答案 1 :(得分:0)

现在你已经回答过了 jQuery.ajax( url [, settings] )发送只是defualt,这意味着它可以更改编码的数据..这有助于防止99%的时间进一步的问题... 他们使用的defualt编码是

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

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

{"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////

答案 2 :(得分:0)

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

道歉并感谢您的帮助 - )