【问题标题】:setlocale(LC_ALL, 'en_GB.UTF8') not working on windowssetlocale(LC_ALL, 'en_GB.UTF8') 在 Windows 上不起作用
【发布时间】:2012-03-18 08:40:37
【问题描述】:

为什么setlocale(LC_ALL, 'en_GB.UTF8'); 在 Windows Server 2003 R2 - Zend CE PHP 5.3.5 上返回 false ?

有问题的函数:setlocale

【问题讨论】:

    标签: php windows utf-8 setlocale


    【解决方案1】:

    来自 PHP 手册:

    setlocale() 的返回值取决于 PHP 运行的系统。它返回的正是系统 setlocale 函数返回的内容。

    因此,在您的情况下,它返回 false,因为系统返回 false。您使用的语言环境可能在您的系统上不可用。

    Windows 支持的setlocale 字符串列表是可用的here。对于英式英语,您需要 engenglish-ukuk。不过,Windows 不支持像 UTF-8 这样的多字节字符集;您可能最终会使用 Windows-1252。

    【讨论】:

    • 你到底想做什么?为什么需要更改系统区域设置?
    • 好的,所以由于某种原因,通过 XMLReader 处理的 UTF-8 编码的 XML 文件,XPath fwrite 在输出时最终不是 UTF-8 编码,字符由于某种原因被弄乱了,谢谢。
    • 系统语言环境几乎肯定与您的问题无关。将您遇到问题的代码放入您的问题中。
    • 不幸的是,它过于复杂 - 基于框架,但它的作用是在输入上采用 UTF-8 XML 并将其写入其他文件,而不会修改任何内容,但字符会被弄乱。
    • 如果没有说明问题的小测试用例,就无法确定问题所在,抱歉。
    【解决方案2】:

    我想补充一点,Windows 不支持 utf-8 的问题可以通过以下方式改善:

    $str=strftime('%a'); //for example
    if(!mb_check_encoding($str,'utf-8')) $str=utf8_encode($str);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多