所以我发送一个带有javascript的字符串到php页面:
if(cp.value!=''){
s+=cp.name +" LIKE '%"+ cp.value +"%'";
console.log(s);
if(sec.value!=''){
s+=" AND "+sec.name+" LIKE '%"+ sec.value +"%'";
console.log(s);
}
}
else{
if(sec.value!=''){disappear
s+=sec.name+" LIKE '%"+ sec.value +"%'";
}
}
console.log(s);
if(s.length!=0){
var connect = new XMLHttpRequest();
connect.onreadystatechange=function(){
if (connect.readyState==4 && connect.status==200){
var resu=connect.responseText;
console.log(resu);
var tab=document.getElementById("main_tab");
tab.innerHTML=resu;
}
};
connect.open("POST","../../Controller/stage.php",false);
connect.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
connect.send("s="+s);
}
}
发送的字符串仅供参考:
CP_Stage LIKE'%90%' AND secteur_stage LIKE'%ait%'
但是当我在php页面中打印请求时,我有类似的东西:
SELECT * FROM Stage WHERE CP_Stage LIKE'�%' AND secteur_stage LIKE'%ait%';
我不知道为什么我的第一个号码会以第一个%消失。 如果有人有想法那就太棒了,谢谢!
答案 0 :(得分:1)
百分号是一个特殊的字符。任何特殊字符,如%,&,?等需要编码。你的"%90"转换为Ascii值。您必须使用encodeURIComponent对这些值进行编码。
s += cp.name + " LIKE '" + encodeURIComponent("%" + cp.value + "%") + "'";
请注意,encodeURIComponent不会转义'
字符。如果您的cp.value为'
,则必须将其替换为其编码值:%27
。
顺便说一句..从客户端发送mySQL查询是一个坏主意 - 这是一个重大的安全漏洞。仅发送值并在服务器端构建查询。