@TopClans

PHP: почему кодировка отдельного символа строки отличается от кодировки самой строки?

Есть архив, в нём файлы с именами на русском языке.
С помощью ZipArchive открываю архив, и хочу распаковать только те файлы, название которых начинается с буквы У, на русском языке.
С ходу не получилось, выяснилось что ZipArchive работает в CP866, поэтому сделал такое:
$filename = $zip->getNameIndex($i);
$filename = iconv('CP866', 'utf-8', $filename);
echo $filename;

В результате получаю правильное название файла.
Далее делаю проверку по первому символу ($filename[0] или substr($filename, 0, 1)) - не работает. Сделал вывод этого символа - получил такое: "Первый символ файла: �"
Попробовал установить кодировку скрипта в самом начале:
mb_internal_encoding("utf-8");
Но это тоже не помогло.
Попробовал сделать сравнение всей строки с полным названием файла - работает, сходится:
if ($filename == "уф100000.xls") echo "Есть";

У меня такое впервые, в чём может быть дело?
ответ: нужно было брать первые 2 символа: substr($filename, 0, 2), или использовать другую функцию: mb_substr($filename, 0, 1)
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
Skiphog
@Skiphog
Crutch developer
- получил такое: "Первый символ файла: �"

Вместо substr используйте mb_substr или любые другие функции Функции для работы с Многобайтными строками
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы