2013-01-25 147 views
-1

我正在搜索我正在处理的项目。当有人搜索一个术语时,它将保存在MySQL数据库中。即时通讯使用mysql_real_escape_string逃避特殊字符,但仍特殊字符在数据库中的一个例子MySQL中的特殊字符

节约不要成为唐\'吨

那我就htmlspecialchars它仍然是相同的。我甚至改变分贝到utf8_general_ci我也试过所有togather。

这里是代码

$addSearch = htmlspecialchars($search); 
$addSearch1 = mysql_real_escape_string($addSearch); 
mysql_query("INSERT INTO search (term) VALUES('$addSearch1') ") 
or die(mysql_error()); 

谁能告诉我一个解决方案。提前致谢。

+1

你试过替换()? – Vamsi

+0

使用mysqli_ *而不是mysql_ * – sandip

+1

你想要mysql做什么?你想我的SQL不保存在数据库中的特殊字符,所以而不是它不存储?如:你想解决什么问题?如果你想单引号存储在数据库中,他们必须存储为转义\'也许你的问题是关于从数据库中退出。再说一遍:你想做什么? – sdjuan

回答

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()); 
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

我会建议检查你的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 
0

事实上,有很多的方式来做到这一点。也许有什么不对的地方你看不到。

$str = addslashes($str); 
$str = addcslashes($str, "'\""); 
$str = str_replace(array("'", '"'), array("\\'", '\\"'), $str); 
$str = preg_replace("~([\"'])~", "\\\\1", $str);