我对整个字符集有点困惑。当数据手动输入网站和数据库表时,一切看起来都很好。除非通过复制和粘贴输入数据 - 字符集会变得很奇怪。
我询问了几位客户从哪里获取这些数据 - 大多数似乎来自另一个网站或来自 MS Document。
看起来困惑的字符是如下常见字符:
‘©“
带有可怕问号的黑色三角形中插入了什么!在我的服务器上,我有以下设置。
PHP TIDY 在输入网页或数据库之前清理文本 - 输出编码 > UTF-8 每个网页都有元标记 > charset=UTF-8 数据库表默认 > latin1_swedish_ci
一开始我认为这是一个数据库问题,直到我注意到非数据库驱动的静态网页也会出现同样的问题。
帮忙?
最佳答案
替换智能引号并不是一个好的解决方案。如果您无法处理智能引号或版权符号,那么您也无法处理任何其他非 ASCII 字符,从而使您只能使用 ASCII 应用程序(如今这是一件非常悲伤的事情)。
相反,您最好确保您的 Web 应用程序始终使用 UTF-8,这意味着:
使用
header('Content-Type: text/html; charset=utf-8');
将所有页面以 UTF-8 格式提供服务和/或<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
.如果您的 .php 源文件本身包含任何非 ASCII 字符,请确保将其保存为 UTF-8。
使用
mysql_set_charset('utf-8')
连接到数据库时。确保您的 MySQL 表是使用 UTF-8
CHARACTER SET
创建的/COLLATION
。如果您在创建它们时未指定它们,则它们不会是默认的。在这种情况下,您需要ALTER TABLE
在每个文本列上进行更改。如果您使用
htmlentities()
要在将数据库内容放入页面时进行 HTML 转义,需要传入utf-8
对于$charset
参数,否则它将通过将所有非 ASCII 字符视为 ISO-8859-1(这永远不是正确的编码)来破坏它们。更好:使用htmlspecialchars()
相反,它不接触非 ASCII 字符,因此不关心。
关于php - 网站字符集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476145/