ajax post到php的撇号问题
我正在用jQueryAjax将数据发布到php中,但如果输入中有ajax post到php的撇号问题,php,javascript,ajax,Php,Javascript,Ajax,我正在用jQueryAjax将数据发布到php中,但如果输入中有”,则不会发布数据。我尝试了encodeURIComponent,但不起作用 有什么想法吗 谢谢 编辑: 我的代码 尝试使用get\u magic\u quotes\u gpc()检查服务器上的magic quotes设置。如果它是打开的,在使用mysql\u real\u escape\u string()之前,您需要去掉斜杠() 查看文档中的示例。尝试使用get\u magic\u quotes\u gpc()检查服务器上的ma
”
,则不会发布数据。我尝试了encodeURIComponent
,但不起作用
有什么想法吗
谢谢
编辑:
我的代码
尝试使用
get\u magic\u quotes\u gpc()
检查服务器上的magic quotes设置。如果它是打开的,在使用mysql\u real\u escape\u string()
之前,您需要去掉斜杠()
查看文档中的示例。尝试使用get\u magic\u quotes\u gpc()
检查服务器上的magic quotes设置。如果它是打开的,在使用mysql\u real\u escape\u string()
之前,您需要去掉斜杠()
查看文档中的示例。如果禁用了magic\u quotes\u gpc
,为什么要在查询中删除斜杠
尝试:
如果您使用POST,在传递数据之前不需要转义数据,但是在mysql的代码中使用斜杠会导致任何撇号的问题,因为这样您的sql就不会转义。如果禁用了magic\u quotes\u gpc
,为什么要在查询中取消斜杠
尝试:
如果您使用POST,在传递数据之前不需要转义数据,但是在mysql代码中使用stripslashes会导致任何撇号出现问题,因为这样您的sql就不会转义。encodeURIComponent不编码撇号,请尝试以下操作:
encodeURIComponent(str).replace("'", "%27");
encodeURIComponent不编码撇号,请尝试以下操作:
encodeURIComponent(str).replace("'", "%27");
这就是我解决问题的原因。由于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);
};
$name = str_replace('%27', "'", urldecode($_POST['name'] ) );
出于我的目的,我需要撇号不再是%27,PHP函数urldecode()也不做撇号,所以我使用str_replace()来处理这个问题
PHP代码片段:
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);
};
$name = str_replace('%27', "'", urldecode($_POST['name'] ) );
这就是我解决问题的原因。由于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);
};
$name = str_replace('%27', "'", urldecode($_POST['name'] ) );
出于我的目的,我需要撇号不再是%27,PHP函数urldecode()也不做撇号,所以我使用str_replace()来处理这个问题
PHP代码片段:
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);
};
$name = str_replace('%27', "'", urldecode($_POST['name'] ) );
我们可以得到客户机/服务器代码片段吗?当您使用post方法时,为什么要对字符串进行编码?只有在使用get时才需要这样做。如果输入有&%chars,则出现了一些问题,这就是我编码的原因。我们可以使用客户端/服务器代码段吗?当使用post方法时,为什么要对字符串进行编码?如果输入有&%chars,就发生了一些问题,这就是为什么我要编码Damn,我在javascriptdamn中找不到任何关于转义撇号的内容,我在javascript中找不到任何关于转义撇号的内容“如果使用POST,在传递数据之前不需要转义”但如果我不逃进去,特殊的角色会破坏阿贾克斯javascript@Ahmetvardar这就是你所有的代码吗?您在js中使用了encodeURIComponent
,但在php中使用了斜杠encodeURIComponent
使用十六进制代码而不是斜杠对数据进行编码,那么为什么要去掉斜杠呢。通过剥离斜杠,您将非转义数据传递给mysql,这将导致它在使用撇号时中断,更不用说mysql注入问题了。好的,我用mysql\u real\u escape\u字符串替换了剥离斜杠,在js中,我将其作为temp。解决方案名称=名称。替换(“,”);“如果您使用的是POST,那么在传递数据之前不需要转义它”,但是如果我没有转义,那么特殊的字符会破坏ajaxjavascript@Ahmetvardar这就是你所有的代码吗?您在js中使用了encodeURIComponent
,但在php中使用了斜杠encodeURIComponent
使用十六进制代码而不是斜杠对数据进行编码,那么为什么要去掉斜杠呢。通过剥离斜杠,您将非转义数据传递给mysql,这将导致它在使用撇号时中断,更不用说mysql注入问题了。好的,我用mysql\u real\u escape\u字符串替换了剥离斜杠,在js中,我将其作为temp。解决方案名称=名称。替换(“,”);