2012-08-03 65 views
0

我有一些特殊字符存储在MySQL数据库中。特别是?我想选择这些字符的所有条目。我目前正在使用着这样一句话:PHP中的特殊字符MySQL语句

的mysql_query( “SELECT * FROM表,其中描述LIKE '%®%' 或名称 LIKE '%®%'”);

它返回0个条目。当我尝试使用%a%时,它会返回很多,所以我知道一切都是正确的,它只是某种字符集问题或其他问题。

当我回显“®”时,它返回“娔。

此外,当我在phpmyadmin中完全相同的查询它正常工作。请帮忙!

+4

你应该停止使用'mysql_ *'函数。他们正在被弃用。请使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不确定使用哪一个,[阅读这篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-03 16:39:20

+0

我认为数据库很好,而且你实际上在PHP端有一个编码问题。 – bfavaretto 2012-08-03 16:40:23

+2

是一种'替代字符',因此您的数据库无法识别,这很可能存储了字符。尝试将连接编码设置为数据库编码(也许UTF-8),然后再试一次。此外,请尝试搜索“适当的字符”,而不是“替换”字符。因为这个字符看起来像Multibyte向我走了Ascii。 – ATaylor 2012-08-03 16:42:05

回答

1

阅读它非常有助于全给你

只需在这些符号添加到您的文字,并执行它的SQL查询:

INSERT INTO tbl_name VALUES ("Here's my text: ©®"); 

当你想要显示它一个网站不要”做T这些符号的任何东西(但记得要逃脱至少<,>,&(使用用htmlspecialchars()),导致这些在XML特殊含义/ SGML(HTML)文档)

PS。还要记住使用mysql_real_escape_string()传递给SQL查询的文本以避免任何SQL注入问题。如果您的服务器启用了magic_quotes_gpc,请将其禁用或至少将您的GET/POST/COOKIE数据过滤为其原始值。你应该总是有意识地逃避价值。 编辑:

根据你的评论...我不记得是否默认启用magic_quotes_gpc,但你可以轻松地撤消魔术引号的效果。刚上的PHP代码的最开始添加如下内容:

if (get_magic_quotes_gpc()) { 
    array_walk_recursive($_GET, 'stripslashes'); 
    array_walk_recursive($_POST, 'stripslashes'); 
    array_walk_recursive($_COOKIE, 'stripslashes'); 
} 

现在每个GPC值应始终原料 - 无报价 - 所以你必须传递任何变量插入查询之前手动逃脱它。