我不确定这个角色设置了什么字符' ...'属于。但是,在某些情况下,用户会将数据复制并粘贴到我正在处理的应用程序的备注字段中。注释内容包含此特殊字符,并导致插入/更新查询失败。
我想知道是否有一个字符串函数来检测并删除这个特殊字符(以及此字符集中的其他不需要的字符),同时保留所有其他特殊字符?
示例:
$query = 'INSERT INTO notes (note) VALUES ("… hello … world!")';
mysqli_query($conn, $query); //nothing is inserted
提前致谢!
答案 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);
逃脱之前。