php - PHP MySQL 语句中的特殊字符

标签 php mysql char

我在 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/

相关文章:

python - 将 INSERT 切换为 REPLACE 会使 DATE_SUB() 结果无效

javascript - 使用 JSP、Java 和 Javascript 的带有数据库数据的 HTML 表

c - 在这种情况下如何获取 char 数组大小?

php - 我如何在 CSS 中运行 PHP

php - CodeIgniter 大批量插入

php - 返回 php 中的 SQL 结果数组以转换为 JSON

mysql - 根据几个 "master date",找到另一个表中存储的最近的日期,数据共同但没有共同的ID

c++ - 通读文件中的字符并计算有多少个字母 [c++]

c++ - 如何将 vector<string> 转换为 vector<char*>

php - 在 Swift (iOS) 上使用 Apache/Nginx/FastCGI 服务 PHP/MySQL