2010-06-10 109 views
0

我发布的数据与jQuery的AJAX到PHP,但如果输入有'里面,数据将不会被张贴。我试过encodeURIComponent,但不会工作。撇号问题与PHP的AJAX帖子

对此有何看法?

感谢

编辑: 我的代码

var name = $("input#name_add").val(); 
     name = encodeURIComponent(name); 

$.post("function.php", { name: name }, function(data) { 

           //codes 
       }); 



$query = "UPDATE `table` SET name = '" . stripslashes($_POST['name']) . "' WHERE ID = '$id'"; 
$result = mysql_query($query); 
if ($result){ 
print "ok"; 

} 
+0

我们能否有客户机/服务器代码的代码片段? – Anax 2010-06-10 16:56:20

+0

添加片段.. – 2010-06-10 17:03:53

+0

当您使用post方法时,为什么要对字符串进行编码?如果你使用get,那应该是必须的。 – 2ndkauboy 2010-06-10 17:06:16

回答

0

尝试检查魔术引号与get_magic_quotes_gpc()您的服务器上设置。如果使用mysql_real_escape_string(),则需要使用strip_slashes()

查看get_magic_quotes_gpc()文档中的示例。

+0

检查,它是关闭 – 2010-06-10 17:21:09

+0

该死的,我无法找到任何关于在javascript中逃避撇号 – 2010-06-10 17:51:38

0

如果magic_quotes_gpc已关闭,为什么要在查询中删除斜杠?

尝试:

$query = "UPDATE `table` SET name = '" . mysql_real_escape_string($_POST['name']) . "' WHERE ID = '$id'"; 

如果您使用POST,你不应该需要传递之前,将逃跑的数据,但在你的MySQL的代码中使用的stripslashes你与任何会引起问题撇号,那么你的SQL将不会被转义。

+0

“如果你使用POST,你不应该需要逃脱数据通过它之前“但特殊字符打破阿贾克斯如果我没有在javascript中逃脱 – 2010-06-10 18:14:46

+0

@Ahmet vardar是你所有的代码?您在js中使用'encodeURIComponent',但在php中剥离斜杠。 'encodeURIComponent'用十六进制代码编码数据不是斜线,所以你为什么要去掉斜杠。通过剥离斜线,你将非转义的数据传递给mysql,当你使用撇号时,会导致它破坏,更不用说mysql注入问题了。 – 2010-06-10 18:26:07

+0

好的,我用mysql_real_escape_string替换了带斜线,并且在js中我将它作为临时文件。解决方案名称= name.replace(“'”,“”); – 2010-06-10 19:04:39

4

encodeURIComponent方法不撇号编码,试试这个:

encodeURIComponent(str).replace("'", "%27"); 
0

这就是解决了这个问题对我来说。由于JavaScript encodeURIComponent()函数不会将撇号编码为%27,因此我使用自己的replaceAll()函数自己完成了该操作。

JS代码片段:

name = encodeURIComponent(name.replaceAll("'", '%27')); 

这是我的公用事业的replaceAll()函数JS文件

String.prototype.replaceAll = function(f, r, no_escape) { 
    var rexp = new RegExp(Util.EscapeRegExp(f), 'g'); 
    if (no_escape) { rexp = new RegExp(f, 'g'); } 
    return this.replace(rexp, r); 
}; 

对于我而言,我需要撇号无法% 27,而PHP函数urldecode()也不会做撇号,所以我用str_replace()来处理这个问题。

PHP代码段

$name = str_replace('%27', "'", urldecode($_POST['name']));