php - 网站字符集问题

标签 php mysql character-encoding

我对整个字符集有点困惑。当数据手动输入网站和数据库表时,一切看起来都很好。除非通过复制和粘贴输入数据 - 字符集会变得很奇怪。

我询问了几位客户从哪里获取这些数据 - 大多数似乎来自另一个网站或来自 MS Document。

看起来困惑的字符是如下常见字符:

‘©“

带有可怕问号的黑色三角形中插入了什么!在我的服务器上,我有以下设置。

PHP TIDY 在输入网页或数据库之前清理文本 - 输出编码 > UTF-8 每个网页都有元标记 > charset=UTF-8 数据库表默认 > latin1_swedish_ci

一开始我认为这是一个数据库问题,直到我注意到非数据库驱动的静态网页也会出现同样的问题。

帮忙?

最佳答案

替换智能引号并不是一个好的解决方案。如果您无法处理智能引号或版权符号,那么您也无法处理任何其他非 ASCII 字符,从而使您只能使用 ASCII 应用程序(如今这是一件非常悲伤的事情)。

相反,您最好确保您的 Web 应用程序始终使用 UTF-8,这意味着:

  1. 使用 header('Content-Type: text/html; charset=utf-8'); 将所有页面以 UTF-8 格式提供服务和/或<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> .

  2. 如果您的 .php 源文件本身包含任何非 ASCII 字符,请确保将其保存为 UTF-8。

  3. 使用mysql_set_charset('utf-8')连接到数据库时。

  4. 确保您的 MySQL 表是使用 UTF-8 CHARACTER SET 创建的/COLLATION 。如果您在创建它们时未指定它们,则它们不会是默认的。在这种情况下,您需要ALTER TABLE在每个文本列上进行更改。

  5. 如果您使用htmlentities()要在将数据库内容放入页面时进行 HTML 转义,需要传入 utf-8对于$charset参数,否则它将通过将所有非 ASCII 字符视为 ISO-8859-1(这永远不是正确的编码)来破坏它们。更好:使用htmlspecialchars()相反,它不接触非 ASCII 字符,因此不关心。

关于php - 网站字符集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476145/

相关文章:

php - Codeigniter 访问回显表内的输入类型

php - 多个 SQL 查询的复选框

php - 使用mysql在15分钟的时间间隔内分割时间间隔

php - 重定向循环错误 laravel auth

php - 如何根据返回的MySQL对象设置对象变量

php - Yii2:登录时设置不正确的用户名或密码消息

php - 我如何检查表名在 Propel 中是否有效?

php - 更改 Laravel 中的字符集

c - 从字符串中删除元音。

java - Intellij IDEA 中的汉字——如何显示?