PHP5中支持Unicode和多语言的策略

4

我听说PHP6将原生支持Unicode,这将希望使多语言支持更加容易。然而,PHP5对于Unicode和多语言的支持相对较弱(即仅有一些专门的字符串函数)。

我想知道您在PHP5应用程序中实现Unicode和多语言支持的策略是什么?

此外,由于PHP5没有像ASP.NET那样的WebResource文件,您如何存储翻译内容?


“transactions” 是什么意思? - deceze
抱歉,那是一个打字错误,我想说的是翻译。 - oscarkuo
1
CakePHP拥有一些出色的翻译功能。在这里查看灵感:http://book.cakephp.org/view/162/Internationalizing-Your-Application - deceze
4个回答

9

其实并不难,但您可能需要将问题具体化一些。

如果您正在与数据库交互,请确保您的数据库以UTF-8格式存储数据,并且与数据库的连接也是UTF-8格式(这是一个常见的陷阱)。在建立连接时,请确保运行以下代码:

mysql_set_charset('utf8');

对于用户输入,请在表单上设置accept-charset属性。

<form accept-charset="utf-8">

使用适当的HTTP头文件提供您的网站:

header('Content-Type: text/html; charset=utf-8');

或者至少为您的网站设置适当的元标签:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

请将您的源代码文件编码为UTF-8。

如果您始终使用UTF-8,通常无需担心任何问题。只有当您在整个应用程序中混合使用编码时,才会出现问题。

当涉及字符串操作时,您需要更加小心。通常,您会希望使用mb_一系列的字符串函数,正如您自己指出的那样。


1
元标签仅在HTTP响应中不包含它们时由客户端解析。这意味着实际上它们几乎毫无用处。另一方面,您应该使用PHP的函数设置标题,该函数被恰当地命名为“header”。 - troelskn
3
为了完整起见,您可能还需要在此答案中提及htmlentities()函数。在使用UTF-8时,应按以下方式使用它:htmlentities($ str,ENT_COMPAT,'UTF-8'); 有关更多信息,请参见https://dev59.com/Q0fRa4cB1Zd3GeqP6iNO#799876#799876。 - Mathias Bynens

1

嗯,对于PHP应用程序开发,我使用CodeIgniter来处理多语言文件。它非常强大且易于使用。

这里是他们的Language Class链接。


1

关于翻译,您可以使用框架或自己编写库。您可以将翻译存储在 CSV 文件中,并使用 PHP 的 fgetcsv() 函数进行解析。CSV 文件可以使用任何电子表格应用程序进行编辑。

例如,您可以查看 Zend_Translate(Zend Framework 的一部分)的代码。它很容易跟随。


1

与 mb_* 函数集的使用相关,在保持兼容性的同时,可以查看 mb_string.overload php.ini 指令。

它将允许您使用已被多字节启用的常规字符串函数进行重载的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接