2017-06-02 38 views
2

即時通訊與一些文件夾/文件閱讀與真正的麻煩。帶有口音的PHP未知編碼

我做了一個scandir o文件夾和一個特定的文件裏面有這個詞的名字:「BAILÉN」。當我做一個「回聲」時,顯示「BAILE'N」。 最大的問題是php不認識這個文件。函數is_file,is_dir,file_exist,rename,scandir ...失敗。

我嘗試了utf8_encode,解碼,iconv與很多的字符集和沒有工作。

這是名稱的文件:

https://mega.nz/#!w34XXa7Z!89NYKRBXkx3u-uaSYZd_E2LijDdzIf3trIUu8UrHE18

PHP版本5.6.12

非常感謝您(抱歉,如果我的英語不是很好)


編輯:

如果有人有興趣。

我的一個合作伙伴開發的一個小C#應用程序來替換有問題的字符(C#功能識別文件)

我能與HEX2BIN和BIN2HEX更換有問題的字符。但是,無論我做什麼,沒有任何的PHP功能可以識別de文件。

我覺得PHP函數有問題,字符和theres沒有我能做的。

+0

錯誤的É字節代碼是:69 204 129,(hex 45 cc 81)這是一個E + COMBINING ACUTE ACCENT – Manuel

回答

1

這是因爲你遇到了Unicode規範重新表達的喜悅。

有更多的方式來表示「É」字符。 utf-8中的U+00C9'C3 89'首字母E帶有尖銳的重音。 或U+0045 U+0301Capital E + Diacritic mark急性口音 Utf-8 '45 cc 81'。你在第二種情況。

還有就是要檢查這個問題的一個辦法:使用U + 00C9點代碼爲「E」嘗試尋找「拜倫」

有自PHP 5.3.0及其靜態函數可用類其目的是解決這些問題: http://php.net/manual/en/class.normalizer.php
http://php.net/manual/en/normalizer.normalize.php

順便說一句,文件名存儲機制是文件系統和操作系統有關。如果您在Linux上運行ext * fs,* BSD或Windows NTFS上的代碼,結果可能會有所不同。

+0

「喜悅」XD。我想我沒有在php中安裝normalizer。我將在下週嘗試使用U + 00C9和U + 0045 U + 0301進行替換。非常感謝你。仍然不知道爲什麼PHP不認識它。 – Manuel