猿问

如何使用PHP中的文件系统函数,使用UTF-8字符串?

如何使用PHP中的文件系统函数,使用UTF-8字符串?

我不能用mkdir若要创建具有UTF-8字符的文件夹:

<?php
$dir_name = "Depósito";mkdir($dir_name);?>

在Windows资源管理器中浏览此文件夹时,文件夹名如下所示:

Depósito

我该怎么办?

我用的是php 5


狐的传说
浏览 402回答 3
3回答

郎朗坤

在unix和linux下(也可能在OSX下),当前的文件系统编码由LC_CTYPE区域设置参数(参见函数)setlocale())。例如,它可能评估如下en_US.UTF-8这意味着编码是UTF-8。然后,可以用以下方法创建文件名及其路径:fopen()或被dir()用这个编码。在Windows下,PHP作为“非Unicode感知程序”运行,然后文件名从文件系统使用的UTF-16(Windows 2000及更高版本)来回转换到选定的“代码页”。控件面板“区域和语言选项”、选项卡面板“格式”设置由LC_CTYPE选项,而“非Unicode程序的管理->语言”则设置文件名的翻译代码页。在西方国家LC_CTYPE参数的计算结果如下language_country.1252其中1252是代码页,也称为“Windows1252编码”,与ISO-8859-1类似(但不完全相同)。在日本,932代码页通常被设置为其他国家,以此类推。在PHP下,您可以创建名称可以用当前代码页表示的文件。反之亦然,从文件系统检索的文件名和路径将使用“最佳匹配”当前代码页.这种映射是近似的,因此某些字符可能会以不可预知的方式损坏。例如,Caffé Brillì.txt将由dir()作为PHP字符串Caff\xE9 Brill\xEC.txt与预期一样,如果当前代码页为1252,则返回近似Caffe Brilli.txt在日本系统中,因为重音元音在932代码页中丢失,然后被它们的“最佳匹配”非重音元音所取代。无法翻译的字符被检索为?(问号)。一般来说,在Windows下,没有安全的方法来检测这些工件。更多详情,请参阅我对PHPbug编号47096.
随时随地看视频慕课网APP
我要回答