我在运行 linux 的服务器上有一个包含 Unicode 字符的文件。如果我通过 SSH 连接到服务器并使用制表符完成导航到包含 unicode 字符的文件/文件夹,则访问文件/文件夹没有问题。当我尝试通过 PHP 访问文件时出现问题(我访问文件系统的函数是stat
)。如果我将 PHP 脚本生成的路径输出到浏览器并将其粘贴到终端,则该文件似乎也存在(即使查看终端,文件路径完全相同)。
我通过 php_ini 和 set 将 PHP 设置为使用 UTF8 作为其默认编码mb_internal_encoding
。我检查了 PHP 文件路径字符串编码,它应该是 UTF8。再摸索一下,我决定hexdump
将终端的制表符完成hexdump
的 é 字符与 PHP 脚本创建的“常规” é 字符进行比较,或者通过键盘手动输入字符(option+e+e on操作系统 x)。结果如下:
回声-né | 十六进制转储 0000000 cc65 0081 0000003 回声-né | 十六进制转储 0000000 a9c3 0000002
允许在终端中正确引用文件的 é 字符是 3 字节字符。我不确定从这里去哪里,我应该在 PHP 中使用什么编码?我应该通过iconv
或将路径转换为另一种编码mb_convert_encoding
吗?