我正在尝试使用英语中的php创建一个目录,它正在运行。 但是当我尝试使用希伯来语时,它会像gibrish一样创建文件夹: '"'•'¨'"'” | '''''''''''''~~
我该如何解决? 感谢
答案 0 :(得分:1)
PHP在处理字符串时有一些Unicode支持,但内部PHP的字符串类型是单字节,不支持多字节编码。如果以UTF-8格式保存PHP文件,则可以使用正确的HTTP编码输出UTF-8中的字符串,但许多PHP函数不支持多字节字符串。有一些可以,但大多数没有。
我浏览了PHP源代码,大多数文件系统函数(如mkdir
)都不支持Unicode。它们在单字节字符串上运行,这就是为什么在尝试创建目录时会出现ASCII乱码的原因。
您可以尝试拨打setlocale
并将其设置为he_IL
,然后再致电mkdir
,看看这是否有所不同。
了解更多信息:
字符串是一系列字符,其中一个字符与a相同 字节。这意味着PHP仅支持256个字符集,因此 不提供本机Unicode支持。请参阅details of the string type。
详细介绍了不同的编码,多字节感知的函数以及基于PHP中是否启用了Zend Multibyte支持的不同行为以及如何在不同的编码中保存文件在PHP中实现字符串。
不幸的是,目前我不相信您可以直接在PHP中创建包含多字节字符串的目录。
在内部,函数mkdir
调用此函数mkdir in file.c,调用_php_stream_mkdir使用plain files wrapper
调用php_mkdir_ex,最终使用{{{{}}创建目录3}}使用C mkdir函数创建目录。
我认为当它调用mkdir在文件系统上创建目录时,所有编码都已丢失,并被视为单字节char *字符串。
答案 1 :(得分:1)
使用mb_convert_encoding将名称(字符串)从UTF-8转换为ISO-8859-8。 我已经用PHP 7和Windows 10对它进行了测试。
答案 2 :(得分:0)
除非你的操作系统的编码系统支持这些字符,否则基本上你不能。希伯来语也必须是扩展的UTF-8包的一部分吗?
例如unde Windows,默认代码页是iso-8859-1,没有希伯来语。
我认为将其切换为UTF-8可能会起作用,因为现在新的Windows版本允许文件名中的所有Unicode字符,但不是真的推荐