Поддержка Проблемы и решения Внезапно изменилась кодировка названий файлов

  • Господа, всем привет!
    Начал сегодня добавлять статью на сайт и заметил странную вещь, при добавлении картинки с именем на русском языке, post_title у картинки вместо привычного названия файла пишется в виде url_encode().

    Пример файл «тест.jpg» — раньше post_title был «тест», теперь «%d1%82%d0%b5%d1%81%d1%82».
    На сервере картинка сохраняется как раньше «тест.jpg».
    Названия картинок выводятся в куче мест, в галерею статью добавляется несколько десятков фото, переименовывать их вручную не хотелось бы.

    В последний раз ровно месяц назад добавлял на сайт новую статью — проблемы не было.
    Сегодня проблема появилась.
    Сам движок не обновлял, плагины тоже…
    Возможно WP обновился в этот промежуток времени автоматически.

    Что делать, куда копать?

Просмотр 2 ответов — с 16 по 17 (всего 17)
  • Модератор Yui

    (@fierevere)

    永子

    Считал что лезть в код движка недопустимо, но работать как-то нужно.

    в данном случае можно и исключение сделать, т.к. в след релизе файлы ядра будут перезаписаны, но и исправление должно выйти, а пока да, как-то нужно работать ) хоть так

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Когда закачивал файл «тест.jpg», создался новый «тест-2.jpg» и отобразился как «-2.jpg».

    Да, я забыл, что pathinfo() зависит от текущей локали PHP и не всегда корректно работает с UTF-8.

    Добавил в тикет исправленный вариант, приведу его и здесь:

    
    function wp37989_fix_encoded_attachment_titles( $data ) {
    	if ( empty( $_FILES ) ) {
    		return $data;
    	}
    
    	$file = current( $_FILES );
    	$ext  = pathinfo( $file['name'], PATHINFO_EXTENSION );
    	$name = wp_basename( $file['name'], ".$ext" );
    
    	$data['post_title'] = sanitize_text_field( $name );
    
    	return $data;
    }
    add_filter( 'wp_insert_attachment_data', 'wp37989_fix_encoded_attachment_titles' );
    

    В итоге убрал из functions.php темы «workaround» и заменил в /wp-admin/inclides/media.php строка 289

    Такое решение в данном случае тоже вполне подходит, именно оно будет в 4.6.2.

Просмотр 2 ответов — с 16 по 17 (всего 17)
  • Тема «Внезапно изменилась кодировка названий файлов» закрыта для новых ответов.