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

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

    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.

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

    картинка

    • Тема изменена 2 недели, 5 дней назад пользователем antoxa82.
    • Тема изменена 2 недели, 5 дней назад пользователем antoxa82.
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Юрий

    (@yube)

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

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

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

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

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

    Модератор Yui

    (@fierevere)

    ゆい

Просмотр 4 ответов — с 1 по 4 (всего 4)