即使在服务器上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
删除字符串?
答案 0 :(得分:0)
AJAX在jQuery中默认编码为application/x-www-form-urlencoded
,在PHP中使用utf8_decode
来获取未转义的数据
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
仅影响最顶层的文件夹。我没有意识到这一点。
道歉并感谢您的帮助 - )