我对这整个字符集有些困惑。当数据手动输入到网站和数据库表时,一切似乎都很好。除非通过复制和粘贴输入数据 - 字符集会变得棘手。
我问过几个客户从哪里获得这些数据 - 大多数似乎来自其他网站或MS文档。
似乎搞乱的字符是常见字符,如下所示:
'©“
插入带有可怕问号的黑色三角形是什么!在我的服务器上,我有以下设置。
PHP TIDY在输入网页或数据库之前清理文本 - 输出编码> UTF-8 每个网页都有元标记>字符集= UTF-8 数据库表默认为> latin1_swedish_ci
我首先假设这是一个数据库问题,直到我注意到非数据库驱动的静态网页出现同样的问题。
帮助?
答案 0 :(得分:2)
取代智能报价并不是一个好的解决方案。如果你无法处理智能引号或版权符号,你也无法处理任何其他非ASCII字符,只留下一个仅使用ASCII的应用程序(这些日子是非常可悲的事情)。
相反,您应该确保您的Web应用程序始终使用UTF-8,这意味着:
使用header('Content-Type: text/html; charset=utf-8');
和/或<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
将您的所有网页设为UTF-8。
如果.php源文件本身包含任何非ASCII字符,请确保将其保存为UTF-8。
连接数据库时使用mysql_set_charset('utf-8')
。
确保使用UTF-8 CHARACTER SET
/ COLLATION
创建MySQL表。如果您在创建它们时未指定它们,则默认情况下不会。在这种情况下,您需要在每个文本列上ALTER TABLE
进行更改。
如果在将htmlentities()
放入页面时使用utf-8
来覆盖HTML-escape数据库内容,则需要为$charset
参数传递htmlspecialchars()
,否则它将全部破坏将非ASCII字符视为ISO-8859-1(从不正确的编码)。更好:改为使用{{1}},不接触非ASCII字符,所以不关心。