将网站字符编码从iso-8859-1更改为UTF-8

时间:2009-10-20 22:11:38

标签: php encoding utf-8 iso-8859-1

大约2年前,我犯了使用iso-8859-1启动大型网站的错误。我现在遇到一些字符问题,特别是在使用ajax将数据发送到服务器时。因此,我想切换到使用UTF-8。

您认为哪些问题来自于此?我知道我必须搜索网站以查找需要更改的字符吗?他们的真实角色。但是,这样做还有其他风险吗?有人曾经这样做过吗?

2 个答案:

答案 0 :(得分:7)

主要困难是确保您已检查所有数据路径是否为UTF-8:

  1. 您的网站是否支持数据库?如果是这样,您需要将所有表格转换为UTF-8或其他一些Unicode编码,这样排序和文本搜索才能正常工作。

  2. 您的网站是否使用某种编程语言来处理动态内容? (PHP,mod_perl,ASP ......?)如果是这样,你必须确保你正在使用的特定语言解释器完全理解某种形式的Unicode,如果它本身不使用UTF-8,则计算转换 - UTF-16是下一个最常见的 - 并检查它是否配置为在其输出到Web服务器时使用UTF-8。

  3. 您的网站是否有某种后端应用服务器?它的文本输出是否使用UTF-8?

  4. 至少有三个不同的地方可以声明网络文档的字符集。请务必更改所有内容:

    • HTTP Content-Type标题
    • 文档“<meta http-equiv="Content-Type">
    • 中的<head>标记
    • 文档顶部的<?xml>标记,如果使用XHTML Strict
  5. 所有这一切都来自我多年前通过一个中等复杂的N层应用追踪一些Unicode数据时的经历,并发现转换链如:

    Latin-1 → UTF-8 → Latin-1 → UTF-8
    

    因此,即使数据最终在浏览器中声称为“UTF-8”,该应用程序仍然只能处理与Latin-1共同的子集。

    那些奇怪的转换链的最大原因是由于当时工具中的Unicode支持不成熟,但如果你不小心让管道UTF-8干净,你仍然会发现自己像这样丑陋。

    至于你关于搜索拉丁文1个字符并逐个转换文件的评论,我不会这样做。我将围绕每个现代Linux系统上的iconv实用程序构建一个脚本,输入系统中的每个文本文件,将其显式转换为Latin-1到UTF-8。不遗余力。

答案 1 :(得分:2)

这样的改变触及(几乎)系统的每个部分。你需要经历一切,从数据库到PHP,再到HTML到网络浏览器。

启动一个测试网站并对其进行一些严肃的测试(各种平台上的各种浏览器做各种事情)。

IMO实际上熟悉UTF-8及其对软件的意义非常重要。几点快点:

  • PHP主要是面向字节的。了解字符与代码点和字节之间的区别,以及UTF-8和Unicode之间的区别。
  • UTF-8设计精良。例如,给定两个UTF-8字符串,面向字节的strstr()仍然可以正常运行。
  • 最常见的问题是将UTF-8字符串视为ISO-8859-1,反之亦然 - 您可能需要向函数添加文档,说明他们期望的编码类型,以减少这类错误。字符串的变量命名约定(表示它们使用的编码)也可能有所帮助。