我正在搜索我正在处理的项目。当有人搜索一个术语时,它将保存在MySQL数据库中。我使用mysql_real_escape_string
来转义特殊字符,但仍然有特殊字符保存在数据库中以示例
不要成为不要
然后我尝试htmlspecialchars
它仍然是一样的。我甚至将数据库更改为utf8_general_ci
,我也尝试了所有数据集。
这是代码
$addSearch = htmlspecialchars($search);
$addSearch1 = mysql_real_escape_string($addSearch);
mysql_query("INSERT INTO search (term) VALUES('$addSearch1') ")
or die(mysql_error());
任何人都可以告诉我这方面的解决方案。提前谢谢。
答案 0 :(得分:1)
使用此正则表达式从字符串
中删除特殊字符$addSearch = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $search);
mysql_query("INSERT INTO search (term) VALUES('$addSearch') ") or die(mysql_error());
并使用mysqli
或pdo
代替mysql
,因为它已弃用,将来可以删除。
答案 1 :(得分:1)
我建议检查您的PHP配置(php.ini)以查看是否启用了“Magic Quotes”。如果是这样,请关闭它们。重新启动您的Web服务。更多info here。
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
如果您无法修改.htaccess
,也可以在php.ini
文件中使用此功能:
php_flag magic_quotes_gpc Off
答案 2 :(得分:1)
试试这样....
$height='aA1`';
$value=preg_replace("/[^\`a-z,. \'\-\d]/i", "", $height);
$value=mysql_real_escape_string($value);
mysql_query("INSERT INTO `table` SET `column`='$value'") or die(mysql_error());
答案 3 :(得分:0)
实际上,有很多方法可以做到这一点。也许你看不到有什么不对劲。
$str = addslashes($str);
$str = addcslashes($str, "'\"");
$str = str_replace(array("'", '"'), array("\\'", '\\"'), $str);
$str = preg_replace("~([\"'])~", "\\\\1", $str);