可能的重复项:
PHP/MySQL中的特殊字符
我有一个问题。我的数据库(MySQL 5.5.20)中有一段文本,其中包含"é"和""等字符,在执行MySQL查询并使用echo($...)显示后无法正确显示。我在数据库中输入的每个特殊字符,它都会在菱形内显示一个小问号。如果我查看数据库本身中的文本,它是一个"é"和",所以我认为问题不在于MySQL。
我可以做的一件事是在输入时str_replace像"'"-->"'"这样的所有内容,但是我必须为每个字符执行此操作。哦,我已经包括了
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这没有用。
希望您拥有所有信息来帮助我,如果不是说:)提前感谢!
米兰
你需要用 utf-8 格式包含所有内容:
- 数据库字段
- 数据库连接(在经典的mysql中
mysql_set_charset('utf8');
,类似于PDO中的$db->exec('SET CHARACTER SET utf8');
) - 内容类型(就像您已经拥有的那样)
我在成功连接到数据库一年多后立即使用 SQL 查询SET NAMES utf8
。但是,当您将所有内容都采用相同的编码时,这不是必需的
- 源文件编码
- 表列排序规则
- 网页编码(PHP
header('Content-Type: text/html; charset=utf-8');
和<header>
<meta name="Content-Type" value="text/html; charset=utf-8" />
)
我通常格式化所有输入文本str_replace将所有不常见的符号替换为它们的 &#xxx; 等效符号,这实际上有助于防止注入和不良的 html 渲染
即,如果有人输入HTML标签,他们将在您的页面中处于活动状态,依此类推。