用ajax发布到php的撇号问题

时间:2010-06-10 16:47:34

标签: php javascript ajax

我使用jquery ajax将数据发布到php,但如果输入内部有',则不会发布数据。我试过encodeURIComponent但不会工作。

对此有何看法?

感谢

编辑: 我的代码

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";

}

4 个答案:

答案 0 :(得分:4)

encodeURIComponent不对撇号进行编码,请尝试:

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

答案 1 :(得分:0)

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

查看get_magic_quotes_gpc()文档以获取示例。

答案 2 :(得分:0)

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

尝试:

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

如果您正在使用POST,则在传递数据之前不需要转义数据,但是在mysql的代码中使用stripslashes会导致任何撇号出现问题,因为您的sql不会被转义

答案 3 :(得分:0)

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

JS片段:

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

这是我的实用程序 JS文件

中的replaceAll()函数
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'] ) );