因此,我已经在此系统上构建了相当长的一段时间,并且它正在向Web浏览器输出Latin1(ISO-8859-1),这是组件:更改MySQL中的字符编码,PHP脚本,HTML
MySQL的 - 所有数据都存储在latin1字符集
PHP - 所有PHP文本文件存储在磁盘上以latin1编码
HTML - 输出有HTTP的当量=“内容类型“content =”text/html; charset = iso-8859-1“meta tag
因此,我试图了解不同部分的编码如何在我的工作流程中发挥作用。如果我打开一个PHP脚本并在文本编辑器中将其编码更改为UTF-8并将其保存回磁盘并重新加载Web浏览器,则文本全部混乱 - 除非文本来自数据库。如果我将数据库的编码更改为UTF-8并将PHP文件保存为latin1,则必须使用utf8_decode()才能正确显示数据。如果我更改HTML代码,浏览器将错误地读取它。
所以是的,我意识到如果我想“升级”到UTF8,我必须更新这个设置的所有三个部分才能正常工作,但是因为它是一个包含大约180k行PHP代码的庞大系统,数百万个数据库/表格中的帖子,我不想在没有正确理解所有内容的情况下开始这样的事情。
我还没有想过什么?除了修复之外,有什么可能让这个问题变得糟什么是更改整个MySQL安装的编码的过程,以及更改磁盘上数百或数千个PHP文件的编码的最简单方法是什么?
meta标记幸运的是动态添加,所以我会改变这种只在一个地方:)
让我听到这个您的经验。
数据库 - 检查,客户端编码 - 你的意思是当通过PHP与MySQL服务器连接时?元标记 - 检查,PHP文件 - 检查,PHP函数...呃,好的。虽然我不使用strlen和substr,那么$ str [index]是什么?你的意思是,当写一个UTF8编码的PHP文件时,我不能写<? print $ foo [“Översrift”]?>假定字符串以UTF8数据的形式发送到PHP解释器,并且保存的索引数据应该是相同的,不是? – Sandman 2010-06-07 11:06:28
只要没有来自别处的数据,$ foo [“Översrift”]将继续工作,前提是所有文件都转换为utf-8。 – Wrikken 2010-06-07 16:07:32
@Sandman是的,我的意思是当通过PHP与MySQL服务器连接时。我的意思是'$ str [index]'就像'$ str [0]'(索引是一个整数)。例如,你不能使用'$ str [0]'获取第一个字符,因为UTF-8是一个多字节编码;如果第一个字符占用超过1个字节(所有非ASCII字符都是这种情况),则$ str [0]将仅获得该字符的第一个字节。还有其他许多情况 - 大部分对字符串进行操作的函数都必须进行修改。 – Artefacto 2010-06-07 23:31:16