带有重音的PHP未知编码

时间:2017-06-02 08:05:18

标签: php character-encoding

使用php读取一些文件夹/文件真的很麻烦。

我做一个文件夹的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功能有问题,我无能为力。

1 个答案:

答案 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上的代码,结果可能会有所不同。