@alexkl

Функция substr и strlen в php не корректо работает с русскими символами. Как решить проблему?

Функция substr и strlen в php не корректо работает с русскими символами (кодировка utf8). Пробовал mb_substr также — не помогло.


Кто поможет решить проблему?
  • Вопрос задан
  • 10146 просмотров
Пригласить эксперта
Ответы на вопрос 5
LIAL
@LIAL
а в чем выражается некорректность то, можно узнать ???
Ответ написан
Комментировать
@alexkl Автор вопроса
Вот к примеру функция:

/**
* shortenText
* @param string
* @param int
* @param bool, default true
* @since 1.0.9
*/
function shortenText( $text, $count, $addbb=true )
{
if( $count > 0 )
{
$totalchars = strlen( $text );
$charcount = 0;
$fulltext = $text;
$buffer = '';
if( $totalchars >= $count )
{
$bbcode = false;
while( strlen( $fulltext ) > 0 )
{
$char = $fulltext{0};
if( $char == '[' ) $bbcode = true;
if( ( $bbcode && $addbb ) || $charcount < $count ) $buffer .= $char;
$fulltext = substr( $fulltext, 1 );
if( !$bbcode ) $charcount++;
if( $char == ']' ) $bbcode = false;
}
$text = $buffer.( $charcount >= $count? '...': '' );
}
}
return $text;
}

Если $fultext — английскими буквами — все ок. Сокращает. Если русскими — пустая строка
Ответ написан
iStyx
@iStyx
1. Используйте mb_substr, mb_strlen с параметром $encoding='utf-8'
2. Не используйте $char=$fulltext{0}, замените на mb_substr
Ответ написан
witbier
@witbier
iconv_substr($s, $from, $len, 'UTF-8')
iconv_strlen($s, 'UTF-8')
$s{$i} ==> iconv_substr($s, $i, 1, 'UTF-8')
Ответ написан
Комментировать
Zyava
@Zyava
У Вас $bbcode всегда $false, это нормально? Код конечно веселый…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы