特殊字符(即“...”字符)导致查询失败

时间:2014-09-30 19:07:13

标签: php utf-8 character-encoding ascii

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

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

示例:

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果我是你,我会考虑接受更广泛的角色。 (你只需要记住正确地逃避角色。)剥离某些角色只是用户友好,使用UTF-8似乎有限。

如果你真的想要删除UTF-8字符,可以使用

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

here所述。


以下是一个例子:

<?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);

答案 1 :(得分:0)

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

你应该做的是:

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

逃脱之前。