2016-03-07 96 views
9

为什么这会返回一个服务器上的utf8字符而不是另一个服务器上?一些文件名包含unicode字符像æøå ..opendir和readdir返回utf8

在某些环境UTF8字符被印刷,并且在一些异字符被印刷

header('content-type: text/plain'); 
$handle = opendir("./dir"); 
while($readdir = readdir($handle)){ 
    echo "$readdir\n"; 
} 

输出Content-Type:text/plain;charset=UTF-8

Retursvar 2 med fejl p� debiteringsniveau.xml 
Retursvar 2 med fejl på debiteringsniveau.xml 

相同的语言环境(UTF8)

dpkg-reconfigure locales 
+0

什么底层的文件系统是在使用?在服务器上使用的文件系统是否与返回不同的结果相同? –

+0

所有系统都是Debian Jessie - 相同的发行版 – clarkk

+0

好的,下一个问题 - 你如何设置内容类型。我假设你通过网络服务器运行并在浏览器中查看?是通过'header()'还是内联html设置内容类型? –

回答

0

这不是PHP的问题,这是一个系统问题。这个问题可能源于其中一个系统上配置错误的语言环境。如果运行locale,则可以检查当前安装的语言环境。如果区域设置未标记为UTF-8,这将是您的问题。安装正确的UTF-8语言环境将解决该问题。

+0

两个系统上都安装了完全相同的语言环境。UTF8 – clarkk

2

您可能发现您的Web服务器在每个系统上以不同的语言环境运行。

为了确定这一点通过你的服务器运行下面的PHP:

<?php 
system("locale"); 

机会是Web服务器返回正确的字符或者是“utf-8”区域或“C”运行。

网络服务器使用的语言环境可以在不同的地方设置。通过使用系统范围的区域设置 - 或者特定的服务。您可能需要调查任何差异的原因,并决定是更新系统范围的区域设置还是仅更新Web服务器。

在Debian中,全系统区域设置更改使用

dpkg-reconfigure locales 

并按照提示进行更改。

或者,对于特定于服务的区域设置。在启动服务之前,将'LANG'环境变量设置为您在服务初始化脚本中所需的环境变量。可能还有一个特定于服务的配置文件,您也可以搜索以在发生网络服务器升级时坚持更改。

+0

两个系统上都安装了完全相同的语言环境。UTF8 – clarkk

+0

澄清 - 系统语言环境可能与Web服务器或任何其他进程不同跑下。您使用什么方法来确定这两个Web服务器都以UTF-8运行? –

-1

尝试设置UTF-8编码在你的头:

header('content-type: text/plain; charset:utf-8');