我维护着两个大致平行的网站,它们都基于最近发布的著名 php CMS。一个网站是英文的,另一个是波兰文的。(波兰语本地化是 CMS 的标准选项。)两个网站都运行正常。
具体来说,波兰语网站可以正确显示波兰语变音字符以及少量“特殊”德语和西里尔字符。当我检查 CMS 生成的标题时,我看到
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
正如我所期望的那样。Unicode 才是最佳选择。
当然,英文网站可以正确显示英文字符,此外,一些类似的“特殊”德语和西里尔字符也可以正确显示。当我检查 CMS 生成的标题时,我看到
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />
这不是我所期望的,因为据我所知,iso-8859-1 无法呈现波兰变音符号和任何西里尔字母。(我想我必须排除非变音波兰字符和看起来像拉丁字符的西里尔字符,但重叠不是重点。)
问题 1:在标头中声明为 iso-8859-1 编码的页面上,波兰变音符号和西里尔字符如何正确呈现?浏览器是否正在读取 BOM 或对实际内容进行分析并覆盖标头声明?还是其他原因?
问题 2:CMS 的默认英文安装是否应继续使用 iso-8859-1 编码而不是 utf-8,这是否有充分的技术理由?我认为所有安装都应使用 utf-8 编码,但没有迫切的理由转换英文版本。也许有人能想到一个很好的理由?
答案1
A1:您的 Web 服务器可能配置为在发送 HTML 之前在 HTTP 标头中发送 UTF-8 编码。我认为您可以使用 Firebug 或 Chrome 开发人员工具检查 HTTP 标头(资源->http://...->标头->响应标头)。
A2:也许他们仍在使用 8859-1,因为他们没有时间切换到 UTF8?
答案2
Q1:CMS 可能使用 HTML 实体来对 ISO 8859-1 代码范围之外的字符进行编码。
Q2:在这种情况下,我不知道选择 ISO 8859-1 而不是 UTF 8 的任何理由。
答案3
unicode 的挑战在于链中的所有环节都必须支持它,否则就会出现乱码。
这是一个常见问题。内容是否存储在数据库中?这必须兼容 UTF8。对于 mysql,请在命令行中登录并发出命令
show table status
每个表都会显示排序规则/字符集编码。
您可以在此处查看有关 php utf8 编码的更多信息
https://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding
更多关于 php/mysql 的信息请点击此处
https://stackoverflow.com/questions/405684/php-mysql-with-encoding-problems
回答您的第二个问题——UTF8 中的 U+0000 到 U+00FF 与 ISO 8859-1 (Latin-1) 相同。我们在所有网站上都使用 UTF-8 进行编码,没有遇到任何困难。