我正在尝试使用英文的 php 制作一个目录,并且它正在工作。但是当我在希伯来语中尝试时,它会像这样在 gibrish 中创建文件夹:׳”׳•׳¨׳“׳”| ׳׳©׳—׳§ ׳©׳•׳׳~</p>
我该如何解决?谢谢
PHP 在处理字符串时有一些 Unicode 支持,但内部 PHP 的字符串类型是单字节的,不支持多字节编码。如果您将 PHP 文件保存为 UTF-8 格式,则可以使用正确的 HTTP 编码以 UTF-8 输出字符串,但是 PHP 的许多函数不支持多字节字符串。有一些这样做,但仍然大多数没有。
我查看了 PHP 源代码,大多数文件系统函数(如mkdir
不支持 Unicode)。它们对单字节字符串进行操作,这就是为什么当您尝试创建目录时会出现 ASCII 乱码。
您可以在调用之前尝试调用setlocale
并将其设置为,看看这是否有任何区别。he_IL
mkdir
了解更多信息:
字符串是一系列字符,其中一个字符与一个字节相同。这意味着 PHP 仅支持 256 个字符集,因此不提供原生 Unicode 支持。查看字符串类型的详细信息。
详细信息更多地讨论了不同的编码、多字节感知的函数和基于 PHP 中是否启用 Zend 多字节支持的不同行为,以及以不同编码保存文件如何影响 PHP 中的字符串。
不幸的是,此时,我不相信您将能够直接在 PHP 中创建包含多字节字符串的目录。
在内部,该函数在 file.c 中mkdir
调用此函数mkdir ,该函数调用_php_stream_mkdir,后者使用plain files wrapper
调用php_mkdir_ex最终使用virtual_mkdir创建目录,该目录使用C mkdir 函数创建目录。
我认为当它调用 mkdir 在文件系统上创建目录时,所有编码都已丢失,它被视为单字节 char * 字符串。
使用 mb_convert_encoding 将名称(字符串)从 UTF-8 转换为 ISO-8859-8。我已经使用 PHP 7 和 Windows 10 对其进行了测试。
基本上你不能,除非你的操作系统的编码系统支持这些字符。希伯来语也必须是扩展 UTF-8 包的一部分,对吗?
例如,在 Windows 下,默认代码页是 iso-8859-1,它没有希伯来语。
我认为将其切换到 UTF-8 可能会起作用,因为现在新的 Windows 版本允许文件名中包含所有 Unicode 字符,但它并不真正推荐