Некорректное отображение

user99

Постоялец
Регистрация
13 Янв 2008
Сообщения
141
Реакции
15
Добрый день!

Подскажите пожалуйста, почему часть символов отображается "???".

абвгдеёжзийклмноп???????????????я.pdf - файл с алфавитом отправлен для теста.

PHP:
foreach ($attachments as $attachment) {
$filename      = $attachment['filename'];
$filenameparts = explode('.', $filename);
$extension     = end($filenameparts);
$extension     = strtolower($extension);
if (in_array('.' . $extension, $allowed_extensions)) {
$filename = implode(array_slice($filenameparts, 0, 0 - 1));
$filename = trim(preg_replace('/[^а-яА-Яa-zA-Z0-9-_ ]/', '', $filename));

if (!$filename) {
$filename = 'attachment';
}

Кодировка UTF-8
 
Скорее всего, проблема с символами "???" связана с кодировкой. Проверьте следующие моменты:

  1. Настройки кодировки файла и базы данных: Убедитесь, что кодировка, используемая в вашем PHP-коде, базе данных, а также в заголовках HTTP, установлена на UTF-8.
  2. Функция preg_replace: В вашей строке preg_replace('/[^а-яА-Яa-zA-Z0-9-_ ]/', '', $filename); есть ограничение на символы, которое может повлиять на результат. Если это регулярное выражение должно обрабатывать кириллицу, убедитесь, что PHP работает в кодировке UTF-8.
  3. Функции строк в PHP: Если PHP установлен с кодировкой по умолчанию, отличной от UTF-8, часть символов может отображаться неправильно. Попробуйте добавить mb_internal_encoding("UTF-8"); в начале скрипта, чтобы указать использование UTF-8 для функций работы с многобайтовыми строками.
  4. Проверка имени файла после очистки: Проверьте результат, возвращаемый после использования preg_replace, чтобы увидеть, не удаляет ли он важные символы.
Попробуйте этот отредактированный код:

Код:
php
$filename = trim(preg_replace('/[^\p{Cyrillic}a-zA-Z0-9-_ ]/u', '', $filename));

/u указывает PHP использовать UTF-8. \p{Cyrillic} позволяет сохранить кириллические символы в именах файлов.
 
Назад
Сверху