为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2019-07-12 15:00:20
如何使用PHP中的文件系统函数,使用UTF-8字符串?我不能用mkdir若要创建具有UTF-8字符的文件夹:<?php $dir_name = "Depósito";mkdir($dir_name);?>在Windows资源管理器中浏览此文件夹时,文件夹名如下所示:Depósito我该怎么办?我用的是php 5
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

在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.


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信