Вопрос по php, file, unicode – Unicode проблема с PHP

1

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

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

Первые три - это файлы с кириллическим алфавитом. Что я должен сделать, чтобы получить правильные имена файлов?

установить кодировку в UTF-8 Dexter Huinda
Этот вопрос похож на тот, который вы задали:stackoverflow.com/questions/708017/… Zack Zatkin-Gold
@deceze Я использую Win7 NTFS PHPst
@DexterHuinda я изменилdefault_charset = "iso-8859-1" вdefault_charset ="UTF-8" но ничего не изменилось PHPst
Это зависит от (файловой) системы и того, с чем она кодирует эти имена. На какой системе вы работаете? deceze♦

Ваш Ответ

1   ответ
4

I am using win7 ntfs

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

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

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

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

Похожие вопросы