导致查询失败的特殊字符(例如';..';字符)


Special characters (i.e. '...' character) causing query to fail

我不确定这个字符"…"是什么字符集属于。但是,在某些情况下,用户会将数据复制并粘贴到我正在处理的应用程序的注释字段中。注释内容包含此特殊字符,会导致插入/更新查询失败。

我想知道是否有一个字符串函数可以检测并删除这个特殊字符(以及这个字符集中其他不需要的字符),同时保留所有其他特殊字符?

示例:

$query = 'INSERT INTO notes (note) VALUES ("… hello … world!")';
mysqli_query($conn, $query); //nothing is inserted

提前感谢!

如果我是你,我会考虑接受更广泛的字符集。(你只需要记住正确地转义字符。)去掉某些字符对用户来说并不友好,使用UTF-8似乎也很有限。

如果你真的想去掉UTF-8字符,你可以使用

$string = preg_replace('/[^('x19-'x7F)]*/','', $string);

如本文所述。


这里有一个例子:

<?php
$string = "a bc…de f";
echo preg_replace('/[^('x19-'x7F)]*/','', $string); 
?>

输出:

a bcde f

最后,你需要逃离你的输入:

$string = preg_replace('/[^('x19-'x7F)]*/','', $string);
$string = mysqli_escape_string($string);
$query = 'INSERT INTO notes (note) VALUES (' . $string . ')';
mysqli_query($conn, $query);

在解决问题之前,不应该将原始输入插入数据库。

你应该做的是:

error_reporting(E_ALL);
$string = mysqli_escape_string($conn, "… hello … world!");
mysqli_query($conn, $query);

error_reporting将在屏幕上显示原始错误,并且转义字符串将:

a) 避免SQL注入。

b) 插入记录,即使它有特殊字符。

现在,如果你需要删除那些特殊的字符,可以使用类似的东西:

$string = preg_replace($pattern, "", $string);

在逃离之前。