希伯来文中的php-mkdir()创建gibrish文件夹


php mkdir() in hebrew creates gibrish folder

我正试图用英语的php制作一个dir,它正在工作。但当我尝试希伯来语时,它会像这样在gibrish中创建文件夹:"

我该怎么修?感谢

PHP在处理字符串时有一些Unicode支持,但内部PHP的字符串类型是单字节的,不支持多字节编码。如果您将PHP文件保存为UTF-8格式,则可以使用适当的HTTP编码以UTF-8输出字符串,但许多PHP函数不支持多字节字符串。有一些人这样做,但大多数人没有。

我查阅了PHP源代码,发现像mkdir这样的大多数文件系统函数都不支持Unicode。它们对单字节字符串进行操作,这就是为什么在创建目录时会出现ASCII乱码的原因。

在调用mkdir之前,您可以尝试调用setlocale并将其设置为he_IL,看看这是否有什么不同。

更多信息:

字符串是一系列字符,其中一个字符与字节这意味着PHP只支持256个字符集,因此不提供本机Unicode支持。请参阅字符串类型的详细信息。

详细信息详细介绍了不同的编码、可识别多字节的函数以及基于PHP中是否启用Zend多字节支持的不同行为,以及以不同编码保存文件如何影响PHP中的字符串。

不幸的是,目前我不相信您能够直接在PHP中创建一个包含多字节字符串的目录。

在内部,函数mkdir调用文件.c中的函数mkdir,该文件调用_php_stream_mkdir,后者使用plain files wrapper调用php_mkdir_ex,最终使用使用c mkdir函数创建目录的virtual_mkdir创建目录。

我认为,当它调用mkdir在文件系统上创建目录时,所有编码都已经丢失,它被视为一个单字节的char*字符串。

使用mb_convert_encoding将名称(字符串)从UTF-8转换为ISO-8859-8。我已经用PHP7和Windows10测试过了。

基本上你不能,除非你的操作系统的编码系统支持这些字符。希伯来语也必须是扩展UTF-8包的一部分,对吗?

例如,在Windows中,默认的代码页是iso-8859-1,它没有希伯来文。

我认为将其切换为UTF-8可能会起作用,因为现在新的Windows版本允许文件名中包含所有Unicode字符,但实际上并不建议使用