Tom*_*Tom 3 php mysql rss collation character-encoding
我已经开始调试我的RSS提要,因为它有一些奇怪的字符(即缺少字符字形).我从两个优秀的初学者资源开始:
我认为我们的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" />
Run Code Online (Sandbox Code Playgroud)
我提出这个问题的真正原因是因为我存储用户输入的数据库字段是" latin1_swedish_ci",我想知道我是否需要将它们转换为" utf8_general_ci"?MySQL真的不关心charset吗?它只看到一堆字节,如果我将Unicode放入一个整理为拉丁语的字段中,它仍然会以Unicode的形式返回?更改字段会很烦人,因为该字段是FULLTEXT索引的一部分,其他字段也需要更改其排序,这意味着删除索引并重建它(当涉及大量TEXT时这不是一项小任务).
我虽然提出这个问题的真正原因,是因为我的存储用户输入我的数据库字段是"latin1_swedish_ci",我想知道我是否需要将它们转换为"utf8_general_ci"?
不,latin1_swedish_ci并且utf8_general_ci是整理 - 而不是字符集.排序规则不会影响字符的存储方式或输入/输出方式.它仅控制排序功能如何排序结果.整理 - 按预期工作 - 应与存储字符集匹配.因此,如果您的表存储在utf8中,则应使用utf8排序规则.
mysql的存储字符集并不直接绑定到php中的字符集.您可以使用utf8作为Mysql的存储字符集,同时在php中使用iso-8859-1.在这种情况下,您需要通过在connection(set names XXX)上设置charset来告诉Mysql .然后Mysql将根据需要进行转换.如果你不使用的MySQL和PHP相同的字符集,你会结束与字符集容量是最低dommon分母,所以即使字符串存储在UTF8,你会不会有字符的完整的Unicode范围可用.因此,你应该在使用UTF8 都 MySQL和PHP.