6

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

您从中看到了什么问题?我知道我必须搜索该站点以查找需要从 ? 更改的字符。到他们的真实性格。但是,这样做还有其他风险吗?有没有人这样做过?

4

2 回答 2

7

主要困难是确保您检查了所有数据路径都是 UTF-8 干净的:

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

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

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

  4. 您可以在至少三个不同的位置声明 Web 文档的字符集。确保全部更改:

    • HTTPContent-Type标头
    • 文件中的<meta http-equiv="Content-Type">标签'<head>
    • <?xml>文档顶部的标记,如果使用 XHTML Strict

这一切都源于我一年前的经验,当时我通过一个中等复杂的 N 层应用程序跟踪了一些 Unicode 数据,并发现了如下转换链:

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

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

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

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

于 2009-10-20T22:36:36.050 回答
2

这样的变化(几乎)触及系统的每个部分。您需要浏览所有内容,从数据库到 PHP 到 HTML 到 Web 浏览器。

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

IMO 重要的是要真正熟悉 UTF-8 及其对软件的意义。几个要点:

  • PHP 主要是面向字节的。了解字符与代码点和字节之间以及 UTF-8 和 Unicode 之间的区别。
  • UTF-8 是精心设计的。例如,给定两个 UTF-8 字符串,面向字节的字符串strstr()仍然可以正常工作。
  • 最常见的问题是将 UTF-8 字符串视为 ISO-8859-1,反之亦然 - 您可能需要在函数中添加文档,说明它们期望的编码类型,以降低此类错误的可能性。字符串的变量命名约定(以指示它们使用的编码)也可能有所帮助。
于 2009-10-20T22:39:46.713 回答