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

Nic*_*ard 6 php encoding utf-8 iso-8859-1

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

你看到了什么问题?我知道我必须搜索网站以查找需要更改的字符?他们的真实角色.但是,这样做还有其他风险吗?有没有人这样做过?

War*_*ung 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文档的字符集.一定要全部改变:

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

所有这一切都源于我多年前通过一个中等复杂的N层应用程序追踪一些Unicode数据时的经历,并发现转换链如:

Latin-1 ? UTF-8 ? Latin-1 ? UTF-8
Run Code Online (Sandbox Code Playgroud)

因此,即使数据最终在浏览器声称是"UTF-8",该应用仍然只能处理与Latin-1共同的子集.

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

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