0

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

mysql_query("SELECT * FROM table WHERE description LIKE '%®%' OR name LIKE '%®%'");

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

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

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

4

1 回答 1

1

阅读这对你很有帮助

只需简单地将这些符号添加到您的文本中,并将其作为 SQL 查询执行:

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

当您想显示它时,网站不会对这些符号做任何事情(但请记住至少转义 <、>、&(使用 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 值都应该是原始的——不带引号——所以你必须在将任何变量传递给查询之前手动对其进行转义。

于 2012-08-03T17:37:43.193 回答