Сведения о вопросе

Sadijon

11:58, 24th August, 2020

Теги

PHP    

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

Просмотров: 363   Ответов: 5

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


Кто поможет решить проблему?



  Сведения об ответе

#hash

16:45, 20th August, 2020

а в чем выражается некорректность то, можно узнать ???


  Сведения об ответе

park

01:12, 18th August, 2020

Вот к примеру функция:

/**
* 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 — английскими буквами — все ок. Сокращает. Если русскими — пустая строка


  Сведения об ответе

fo_I_K

22:36, 5th August, 2020

1. Используйте mb_substr, mb_strlen с параметром $encoding='utf-8'
2. Не используйте $char=$fulltext{0}, замените на mb_substr


  Сведения об ответе

COOL

17:30, 4th August, 2020

iconv_substr($s, $from, $len, 'UTF-8')
iconv_strlen($s, 'UTF-8')
$s{$i} ==> iconv_substr($s, $i, 1, 'UTF-8')


  Сведения об ответе

lool

22:45, 23rd August, 2020

У Вас $bbcode всегда $false, это нормально? Код конечно веселый…


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться