我已经开始调试我的RSS提要,因为它有一些奇怪的字符(即缺少字符字形).我从两个优秀的初学者资源开始:
>绝对最低每个软件开发人员绝对必须知道Unicode和字符集:http://www.joelonsoftware.com/articles/Unicode.html
>字符集/字符编码问题:http://www.phpwact.org/php/i18n/charsets
我认为我们的RSS源存在问题的原因是因为用户将MS Word文档复制并粘贴到网站上的textarea中,而我们的PHP页面使用的是“iso-8859-1”字符集,这与特殊的“Windows-”不兼容1252“用于MS Word使用的项目符号和智能引号等编码.
所以我希望能解决这个问题,我需要做的就是在获取/提供用户输入的页面中开始使用“utf-8”.即在HEAD部分中设置以下内容:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
我提出这个问题的真正原因是因为我存储用户输入的数据库字段位于“latin1_swedish_ci”中,我想知道是否需要将它们转换为“utf8_general_ci”? MySQL真的不关心charset吗?它只看到一堆字节,如果我将Unicode放入一个整理为拉丁语的字段中它仍然会以Unicode的形式返回?更改字段会很烦人,因为该字段是FULLTEXT索引的一部分,其他字段也需要更改其排序,这意味着删除索引并重建它(当涉及大量TEXT时这不是一项小任务).
解决方法:
The real reason I’m raising this question though, is because my DB fields that store my user input are in “latin1_swedish_ci” and I want to know whether I NEED to convert them to “utf8_general_ci”?
不,latin1_swedish_ci和utf8_general_ci是排序规则 – 而不是字符集.排序规则不会影响字符的存储方式或输入/输出方式.它仅控制排序功能如何排序结果.整理 – 按预期工作 – 应与存储字符集匹配.因此,如果您的表存储在utf8中,则应使用utf8排序规则.
mysql的存储字符集并不直接绑定到php中的字符集.您可以使用utf8作为Mysql的存储字符集,同时在php中使用iso-8859-1.在这种情况下,您需要通过在连接上设置charset(设置名称XXX)来告诉Mysql.然后Mysql将根据需要进行转换.如果你没有在Mysql和php上使用相同的字符集,你最终会得到最低的dommon分母的字符集容量,所以即使字符串存储在utf8中,你也不会拥有完整的unicode字符范围可用.因此你应该在Mysql和php中使用utf8.