MySQL中的特殊字符

时间:2013-01-25 04:50:12

标签: php mysql

我正在搜索我正在处理的项目。当有人搜索一个术语时,它将保存在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());  

任何人都可以告诉我这方面的解决方案。提前谢谢。

4 个答案:

答案 0 :(得分:1)

使用此正则表达式从字符串

中删除特殊字符
$addSearch = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $search);
mysql_query("INSERT INTO search (term) VALUES('$addSearch') ") or die(mysql_error()); 

并使用mysqlipdo代替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);