我在一台运行Linux的服务器上有一个包含Unicode字符的文件。如果我通过SSH进入服务器并使用tab键自动补全来访问包含unicode字符的文件/文件夹,那么我访问该文件/文件夹时没有任何问题。但是,当我尝试通过PHP访问文件时(我从中访问文件系统的函数是
我设置PHP使用UTF8作为其默认编码方式,并设置了
stat
),问题就出现了。如果我将PHP脚本生成的路径输出到浏览器并将其粘贴到终端中,文件似乎也存在(即使查看终端,文件路径完全相同)。我设置PHP使用UTF8作为其默认编码方式,并设置了
mb_internal_encoding
。我检查了PHP文件路径字符串编码方式,并且它是UTF8,正如应该的那样。进一步探索后,我决定对终端的tab键补全产生的é字符进行hexdump
并与PHP脚本或手动键入字符(在OS X上是option+e+e)所创建的'regular' é字符的hexdump
进行比较。以下是结果:
echo -n é | hexdump 0000000 cc65 0081 0000003 echo -n é | hexdump 0000000 a9c3 0000002允许在终端中正确引用文件的é字符是3个字节的字符。我不确定接下来该怎么办,我应该在PHP中使用哪种编码方式?我是否应该通过
iconv
或mb_convert_encoding
将路径转换为另一种编码方式?