大约2年前,我犯了使用iso-8859-1启动大型网站的错误。我现在遇到一些字符问题,特别是在使用ajax将数据发送到服务器时。因此,我想切换到使用UTF-8。
您认为哪些问题来自于此?我知道我必须搜索网站以查找需要更改的字符吗?他们的真实角色。但是,这样做还有其他风险吗?有人曾经这样做过吗?
答案 0 :(得分:7)
主要困难是确保您已检查所有数据路径是否为UTF-8:
您的网站是否支持数据库?如果是这样,您需要将所有表格转换为UTF-8或其他一些Unicode编码,这样排序和文本搜索才能正常工作。
您的网站是否使用某种编程语言来处理动态内容? (PHP,mod_perl,ASP ......?)如果是这样,你必须确保你正在使用的特定语言解释器完全理解某种形式的Unicode,如果它本身不使用UTF-8,则计算转换 - UTF-16是下一个最常见的 - 并检查它是否配置为在其输出到Web服务器时使用UTF-8。
您的网站是否有某种后端应用服务器?它的文本输出是否使用UTF-8?
至少有三个不同的地方可以声明网络文档的字符集。请务必更改所有内容:
Content-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干净,你仍然会发现自己像这样丑陋。
至于你关于搜索拉丁文1个字符并逐个转换文件的评论,我不会这样做。我将围绕每个现代Linux系统上的iconv
实用程序构建一个脚本,输入系统中的每个文本文件,将其显式转换为Latin-1到UTF-8。不遗余力。
答案 1 :(得分:2)
这样的改变触及(几乎)系统的每个部分。你需要经历一切,从数据库到PHP,再到HTML到网络浏览器。
启动一个测试网站并对其进行一些严肃的测试(各种平台上的各种浏览器做各种事情)。
IMO实际上熟悉UTF-8及其对软件的意义非常重要。几点快点:
strstr()
仍然可以正常运行。