mysqli_real_escape_string用空格替换一些字符

时间:2016-01-26 11:43:32

标签: php mysqli

mysqli_real_escape_string+&€这样的空格替换一些字符 有时%<>。 这是代码:

if(isset($_POST['msg'])) {
//
$msg = mysqli_real_escape_string($con, $_POST['msg']);
 if(strlen($msg)>128) {
    die('<p id="red">Message CANNOT be more than 128 characters</p>');
 }
 if(strlen($msg)<5) {
     die('<p id="red">Message CANNOT be less than 5 characters</p>');
 }    
 //update msg
 $sbUpdate = $con->query('UPDATE sB SET un="'.$xun.'", msg="'.$msg.'" WHERE id ="0"');

 if($sbUpdate===TRUE) {
    echo('Sent!');
 }else {
     echo('Error! could not send.');
 }
 }else {
 echo('Error');
}

1 个答案:

答案 0 :(得分:2)

首先,MySQL不支持双引号。改为使用单引号作为值。

其次,如果你引用docs,你会看到:

  

编码的字符是NUL(ASCII 0),\ n,\ r,\,',“和Control-Z。

第三,有这个巨大的警告:

  

注意

     

安全性:默认字符集

     

字符集必须在服务器级别设置,或者使用   API函数mysqli_set_charset()让它影响   mysqli_real_escape_string()。请参阅有关角色的概念部分   设置更多信息。

根据您的字符集,您的角色可能会被吞下。

最后但并非最不重要的是,为了避免像这样的问题,你最好使用prepared statements