我使用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";
}
答案 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'] ) );