我在 MySQL 数据库中存储了一些特殊字符。特别是®。我想选择带有这些字符的所有条目。我目前正在使用这个语句:
mysql_query("SELECT * FROM table WHERE description LIKE '%®%' OR name LIKE '%®%'");
它返回 0 个条目。当我尝试使用 %a% 进行某些操作时,它会返回很多内容,所以我知道一切都正确,这只是某种字符集问题或其他问题。
当我回显“®”时,它返回“å¡”。
此外,当我在 phpmyadmin 中执行完全相同的查询时,它可以正常工作。请帮忙!
最佳答案
阅读本文对您非常有帮助
只需将这些符号添加到文本中,然后将其作为 SQL 查询执行即可:
INSERT INTO tbl_name VALUES ("Here's my text: ©®");
当您想要显示它时,网站不会对这些符号执行任何操作(但请记住至少转义 <、>、&(使用 htmlspecialchars()),因为这些符号在 XML/SGML (HTML) 中具有特殊含义文件)
PS。还要记住使用 mysql_real_escape_string() 对传递给 SQL 查询的文本进行转义,以避免任何 SQL 注入(inject)问题。如果您的服务器启用了 magic_quotes_gpc,请禁用它或至少将您的 GET/POST/COOKIE 数据过滤为其原始值。你应该始终有意识地逃避值(value)观。 编辑:根据您的评论...我不记得默认情况下是否启用 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 值应该始终是原始值 - 不带引号 - 因此您必须在将任何变量传递到查询之前手动转义它。
关于php - PHP MySQL 语句中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799817/