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

时间:2012-07-28 18:46:04

标签: php html mkdir

我正在尝试使用英语中的php创建一个目录,它正在运行。 但是当我尝试使用希伯来语时,它会像gibrish一样创建文件夹: '"'•'¨'"'” | '''''''''''''~~

我该如何解决? 感谢

3 个答案:

答案 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字符,但不是真的推荐