网站字符集问题

时间:2010-12-18 01:44:30

标签: php mysql character-encoding

我对这整个字符集有些困惑。当数据手动输入到网站和数据库表时,一切似乎都很好。除非通过复制和粘贴输入数据 - 字符集会变得棘手。

我问过几个客户从哪里获得这些数据 - 大多数似乎来自其他网站或MS文档。

似乎搞乱的字符是常见字符,如下所示:

'©“

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

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

我首先假设这是一个数据库问题,直到我注意到非数据库驱动的静态网页出现同样的问题。

帮助?

1 个答案:

答案 0 :(得分:2)

取代智能报价并不是一个好的解决方案。如果你无法处理智能引号或版权符号,你也无法处理任何其他非ASCII字符,只留下一个仅使用ASCII的应用程序(这些日子是非常可悲的事情)。

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

  1. 使用header('Content-Type: text/html; charset=utf-8');和/或<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>将您的所有网页设为UTF-8。

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

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

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

  5. 如果在将htmlentities()放入页面时使用utf-8来覆盖HTML-escape数据库内容,则需要为$charset参数传递htmlspecialchars(),否则它将全部破坏将非ASCII字符视为ISO-8859-1(从不正确的编码)。更好:改为使用{{1}},不接触非ASCII字符,所以不关心。