-1

我正在搜索我正在从事的项目。当有人搜索一个词时,它将被保存在 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

4 回答 4

1

使用此正则表达式从字符串中删除特殊字符

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

并使用mysqliorpdo代替,mysql因为它已被弃用并且可以在将来删除。

于 2013-01-25T04:53:40.957 回答
1

我建议检查您的 PHP 配置 (php.ini) 以查看是否启用了“Magic Quotes”。如果是这样,请关闭它们并重新启动您的网络服务。更多信息在这里

; 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
于 2013-01-25T04:55:37.647 回答
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());
于 2013-01-25T05:11:10.743 回答
0

实际上,有很多方法可以做到这一点。也许有一些你看不到的错误。

$str = addslashes($str);
$str = addcslashes($str, "'\"");
$str = str_replace(array("'", '"'), array("\\'", '\\"'), $str);
$str = preg_replace("~([\"'])~", "\\\\1", $str);
于 2013-01-25T04:57:49.280 回答