Поддержка Проблемы и решения Слетает кодировка при выводе контента

  • Решено antoxa82

    (@antoxa82)


    Создал свой плагин. В нем пишу код:

    add_filter( 'the_content', 'my_func' );
    
    function my_func( $content ) {
    	$content = $content[25];
    	return $content;
    }

    Т.е. беру к примеру 25 символ строки и вывожу его на экран. Но вместо символа выводятся кракозябра. При этом, если убрать строчку $content = $content[25], т.е. вывести просто контент не меняя, то все выводится нормально. Проблемы только с контентом, как видно на скрине, весь остальной текст в других областях выводится хорошо.
    Что пробовал:
    1) Набираю код в нотпаде++, ставил кодировку UTF-8 в нем;
    2) Вставлял в .htaccess строку AddDefaultCharset utf-8;
    3) Ну, тут очевидно, но в хеде страницы стоит <meta charset=»UTF-8″ />;
    4) Так же пробовал перекодировать переменную $content с помощью PHP функции mb_convert_encoding;

    У БД кодировка utf8_general_ci.

    Проблема явно как-то связана с БД, но в чем именно дело не пойму.

    картинка

    • Тема изменена 3 года назад пользователем antoxa82.
    • Тема изменена 3 года назад пользователем antoxa82.
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Yuri

    (@yube)

    Т.е. беру к примеру 25 символ строки

    В UTF-8 кириллические символы состоят не из одного, а из двух байт, поэтому и выводится половина символа. Для получения 25-го символа (а не байта) следует использовать функцию mb_substr.

    Автор antoxa82

    (@antoxa82)

    Да, действительно, теперь работает. Спасибо большое.
    Т.е. получается при работе с многобайтовыми символами нужно использовать всегда функции с приставкой mb_?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Да, эти функции для того и созданы.

    Модератор Yui

    (@fierevere)

    永子

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Слетает кодировка при выводе контента» закрыта для новых ответов.