Intereting Posts

Проблема с Unicode с PHP

Я использовал функцию dirscan php для получения массива имени файла, он возвращает массив следующим образом:

 [8] => ?????? ?????.js [9] => ???????? ????? ??? ?????.js [10] => ???????? ???????????? ????????.js [11] => ?????????? ???.js [12] => A Contra Corriente.js [13] => ABC-CLIO Serials Web.js [14] => ACL.js 

первые три – это файлы, имена которых на кириллице. Что делать, чтобы получить правильные имена файлов?

Я использую win7 ntfs

Извините, PHP, работающий под Windows, не может поддерживать имена файлов, содержащие общие символы Unicode. Он может справляться только с именами файлов, полностью состоящими из символов, которые лежат на текущей кодовой странице.

Эта кодовая страница, вероятно, 1252 для вас (западноевропейская, похожая на ISO-8859-1), которая не содержит кириллицу. Если вы запустите его на установке на русском языке, тогда ваша кодовая страница будет 1251, а кириллические персонажи будут работать, но латинская латинская буква будет ломаться.

Это проблема, которая затрагивает все приложения, использующие стандартные вызовы библиотеки C stdio из среды выполнения MS C, включая PHP, Java и другие. (Некоторые языки, такие как Python, имеют специальную поддержку имен файлов Unicode с использованием API-интерфейсов Windows, а не C stdlib, а запрос 45517 – тот же, что и PHP, но не задерживайте дыхание.)

На платформах, отличных от Windows, Unicode, как правило, поддерживается с помощью байтовых строк с кодировкой UTF-8, и поэтому все символы Unicode работают. К сожалению, Windows не имеет такой возможности (кодовая страница 65001 – это вид UTF-8, но сильно сломан).