首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理多语言网站

问处理多语言网站
EN

Stack Overflow用户
提问于 2012-09-26 12:37:16
回答 3查看 1.1K关注 0票数 1

我有一个多语言的网站,与数据库沟通,其中包含特定语言的翻译。

例如,表性别有10行,每行表示一种语言。

代码语言:javascript
复制
+---------+-----------+-----+
| English | French    | etc |
| Male    | Masculine | ... |
+---------+-----------+-----+

有些语言(如汉语、希腊语、土耳其语、西班牙语、俄语等)在latin1之外有字符,当我从我的网站上的数据库中读取数据时,它们会出现?和混淆符号(mojibake)。

那我该怎么解决这个问题?

我知道我需要在db上使用某些排序规则,并添加特定的元字符集标记,但它仍然不起作用。

代码语言:javascript
复制
 cp1256 | Windows Arabic          | cp1256_general_ci (it's not giving me the correct arabic solution.)
 gbk    | GBK Simplified Chinese  | gbk_chinese_ci    (it's not giving me the correct chinese solution.)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-26 14:13:30

在查看多语言系统时,您的系统中有大量需要考虑的区域。

您需要确保在整个系统中使用合适的字符编码。在大多数情况下,字符编码的最佳选择是UTF-8.(在某些情况下,UTF-8是不够的,对于这些情况有UTF-16,但这些情况是很少和遥远的,PHP将与UTF-16无论如何,所以一般来说坚持UTF-8的一切,你会没事)。

您需要确保在以下位置使用相同的字符编码:

  • 你的数据库表。
  • 你的网络服务器。
  • 你的PHP源代码。

数据库很容易处理:只需确保所有表都是用UTF-8编码为其字符集创建的。工作完成了。

排序规则不太相关--这指定排序顺序。这当然很重要,但与你看到的乱七八糟的文本显示没有任何关系。(值得指出的是,有些字符在不同的语言中排序不同,因此,如果您需要在一个表中支持多种语言,那么几乎不可能选择适合每个人的排序模式,但我现在不太担心这一点)。

web服务器也相对简单,只要您对Apache (或您正在使用的任何服务器软件)感到满意。您需要确保所有输出到浏览器的页面都使用UTF-8编码发送。

最后,PHP源代码..。

首先,您应该确保在UTF-8模式下编辑实际的PHP代码文件。否则,如果在代码中写入任何扩展字符,则可能会遇到任何问题。

其次,要注意的是,许多PHP的标准字符串处理函数“不具有多字节感知”。这意味着它们不能正确地处理扩展字符集。例如,strlen()将返回字符串在内存中占用的字节数。如果您的字符串包含占用一个以上字节的字符,这将是不正确的。幸运的是,PHP还提供了一组多字节函数来解决这个问题。例如,不要使用strlen(),而是使用mb_strlen()。PHP手册提供了更多关于可用函数的更详细信息,以及何时使用它们。

此外,确保您处理任何传入张贴的数据与正确的字符集以及。

希望这能帮到你。这里的关键是确保您的系统在其所有层都使用一致的字符集。当系统中的一个层与其他层使用不同的字符集时,会出现奇怪的编码错误问题。确保它们都是一样的(最好是UTF-8),并且你应该处理你的错误角色问题。

票数 1
EN

Stack Overflow用户

发布于 2012-09-26 13:03:42

排序规则仅用于排序,而字符集用于存储。显然,您使用的是latin1字符集,这很有趣。许多人建议使用utf-8字符集,因此现在必须将所有数据转换为该字符集。就我个人而言,我会使用二进制数据(binary与char,varbinary与varchar,blob与text)。如果您需要精确的排序(排序),这只是一个问题,因为二进制排序是不同的。

票数 1
EN

Stack Overflow用户

发布于 2012-09-26 15:22:36

最简单的方法将是使用UTF-8的整个网站。UTF-8可以处理其他编码的所有已知字符。如果您正在使用mysql,那么在进行查询之前告诉连接对象使用UTF-8是很重要的。我写了一篇关于如何使用PHP和MySQL中的UTF-8的短文。

排序规则与字符集不一样,它只定义如何比较两个值(例如,排序)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12601887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档