我做一个文件夹的scandir,里面的一个特定文件的名字带有这些词:“BAILÉN”。当我做“回声”时,它显示“BAILE'N”。 最大的问题是php不识别文件。函数is_file,is_dir,file_exist,rename,scandir ......失败。
我尝试了很多字符集的utf8_encode,decode,iconv,没有任何效果。
这是一个名称为
的文件https://mega.nz/#!w34XXa7Z!89NYKRBXkx3u-uaSYZd_E2LijDdzIf3trIUu8UrHE18
PHP Version 5.6.12
非常感谢(抱歉,如果我的英语不好)
编辑:
如果有人有兴趣。
我的一个合作伙伴开发了一个小型C#应用程序来替换有问题的字符(C#函数识别文件)
我能够用hex2bin和bin2hex替换有问题的char。但无论我做了什么,PHP函数都没有识别de file。
我认为php功能有问题,我无能为力。
答案 0 :(得分:1)
这是因为您遇到了Unicode规范代表的喜悦。
有更多方法可以表示“É”字符。在utf-8'C3 89'中的U+00C9
具有急性重音的资本E 。
或U+0045 U+0301
Capital E + Diacritic mark acute accent Utf-8 '45 cc 81'。你是第二种情况。
有一种方法可以检查这个问题:尝试使用“É”的U + 00C9点代码寻找“BAILÉN”
自PHP 5.3.0以来,有一个类可用,它的静态函数旨在解决这些问题:
http://php.net/manual/en/class.normalizer.php
http://php.net/manual/en/normalizer.normalize.php
顺便说一句,文件名存储机制是文件系统和操作系统相关的。如果您在Linux上运行ext * fs,* BSD或者带有NTFS的Windows上的代码,结果可能会有所不同。