1

我似乎无法正确理解它。

我有这个代码:

putenv('LC_ALL=eng_US.UTF-8');
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US'));

Windows 上的输出

string 'English_United States.1252' (length=26)

Linux 上的输出

bool(false)

Linux 适用于 en_US,但不适用于 Windows。Windows 会查看文件夹 eng_US 和 Linux en_US。

有没有人找到解决方案?或者有没有办法放置一个无论操作系统如何都会考虑的自定义字符串?

(我必须补充一下,我在 Windows-7 上使用 WAMP,而 Linux 机器是带有 nginx + php-fpm 的 CentOS)

4

1 回答 1

2

语言环境名称取决于平台。

在您想要的大多数 unix 系统上<two letter language code>_<two letter country code>[.<optional encoding>]。您可以使用命令行locale -a列出有效的语言环境名称。

正确的 Windows 语言环境使用相同的 X_X[.X] 方案,只是它们使用语言和国家的全名,并且它们使用代码页号而不是编码名称:English_United States.1252. Windows 似乎也有一些用于找出其他字符串的启发式方法,尽管它似乎并没有像 Unix 风格的语言环境名称那样工作。此外,无论您使用名称“UTF-8”还是使用代码页号“65001”指定它,Windows 都不支持将 UTF-8 作为语言环境编码。

正如您所发现的那样,Windows 和其他平台的语言环境名称是不同的。您不能对所有平台使用相同的字符串。相反,您必须编写使用当前平台的正确字符串的代码。

if Linux
    return "en_US.UTF-8"
if Windows
    return "English_United States.1252"
于 2012-08-22T19:43:51.613 回答