WordPress как на ладони

Количество символов. Обрезка текста в PHP

Здравствуйте.

Есть проблема с одной темой для WP.

Почему-то в некоторых функциях темы (слайдер, некоторые разделы с фиксированными блоками для текста), количество вводимого текста ограничено. Причем есть разница в ограничение для кириллических символов и латинских. Так, например, латиницы выводит на экран до 93 символов, а кириллических всего 40. Подскажите, где искать проблему?

Заметки к вопросу:
stepan 8.8 лет назад

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

0
Гость
8.9 лет назад
  • 0
    Kama9616

    Как правильно заметил stepan вам нужно найти функцию которая обрезает текст. Далее, замените в ней PHP функции strlen(), substr() на mb_substr(), mb_strlen().

    Вот пример обрезки строки:

    // Обрезаем
    $text = 'Этот текст нужно обрезать';
    $maxchar = 10; // макс длинна
    if ( mb_strlen( $text ) > $maxchar ){
    	$text = mb_substr( $text, 0, $maxchar ) .'...';
    }
    echo $text; // выведет: Этот текст...

    Дело тут в том, что кириллические символы имеют больший размер в байтах, чем латиница. А стандартные функции обрезки PHP, типа strlen() режут по размеру, а не по символам... При такой обрезке кириллических символов, почти всегда в конце появляется непонятный знак: вопрос в ромбике - �

    И еще...

    Функции mb_* не всегда работают, потому что MD расширение PHP устанавливается отдельно. Если у вас они не будут работать, то используйте стандартные функции, понимающие кодировку: iconv_strlen(), iconv_substr() - для них желательно указать кодировку 'utf-8'. Для функций mb_* кодировку указывать не обязательно.

    И еще mb_* работает на порядок быстрее, чем iconv_*.

    campusboy 4.8 лет назад

    В WP определены mb_* функции на случай, если не установлено PHP расширение smile, так что их спокойно можно использовать в коде.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация