我正在尝试从字符串中删除特殊字符。
用户在WYSWIG编辑器中输入文本并单击“保存”,然后将数据保存在数据库中。
但是输入了'
(例如,在单词don't
中,脚本失败。
我已经尝试了以下但是它没有用,有人可以建议吗?
$content=$_POST[content];
function clean($content) {
$string = str_replace(' ', '-', $content); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $content); // Removes special chars.
return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
}
$result=mysql_query("update TABLE set content='$string' WHERE id='$id'");
答案 0 :(得分:3)
您应该使用:http://php.net/manual/en/function.mysql-real-escape-string.php
因为它会自动转义任何特殊字符并帮助防止SQL注入
请注意该页面上强烈建议不推荐使用MySQL并使用MySQLi的大红色横幅。
MySQLi的例子是:
$Sql = new MySQLi("localhost", "username", "password", "database_name");
$stmt = $Sql->prepare("UPDATE table SET content = ? WHERE id = ?");
$stmt->bind_param('si', $string, $id);
$stmt->execute();
$stmt->close();
答案 1 :(得分:1)
有很多方法可以从字符串中删除不需要的字符。
addslashes()
会在单引号和双引号http://php.net/manual/en/function.addslashes.php之前添加斜杠
htmlspecialchars()
会将所有有问题的字符转换为HTML代码http://php.net/manual/en/function.htmlspecialchars.php
最后,最重要的是你的代码现在容易被mysql注入,以防止使用mysql_real_escape_string()
来删除所有可能导致问题的字符http://php.net/manual/en/function.mysql-real-escape-string.php
您还应该考虑切换到MySQLi或PDO(我更喜欢PDO),因为有了它,您就会得到准备好的语句,而且您永远不会遇到这样的问题,也不会遇到安全问题。 MySQL已弃用,您的脚本将来无法使用。