mysqli_real_escape_string用空格替换某些字符


mysqli_real_escape_string replace some characters with whitespace

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');
}

首先,MySQL不支持双引号。请改用单引号表示值。

其次,如果您参考文档,您将看到:

编码的字符为 NUL (ASCII 0)、'、''r、''、'、" 和 Control-Z。

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

谨慎

安全性:默认字符集

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

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

最后但并非最不重要的一点是,为了避免这样的问题,你最好使用预准备语句。