Когда я использую substr()
я получаю странный символ в конце
$articleText = substr($articleText,0,500);
У меня есть вывод 500 символов и <-
Как я могу это исправить? Это проблема кодирования? Мой язык – греческий.
substr
подсчитывает байты, а не символы.
greek, вероятно, означает, что вы используете некоторую многобайтовую кодировку, например UTF-8, и подсчет для каждого байта для них не очень хорош.
Возможно, использование mb_substr
может помочь здесь: функции mb_*
были созданы специально для многобайтовых кодировок.
mb_substr
этого используйте mb_substr
, он может иметь дело с несколькими кодировками, а не только однобайтными строками в качестве substr
:
$articleText = mb_substr($articleText,0,500,'UTF-8');
Похоже, вы нарезаете символ юникода пополам. mb_substr
этого используйте mb_substr
для надежной mb_substr
.
Альтернативное решение для кодированных строк UTF-8 – это преобразует UTF-8 в символы перед резкой подстрокой.
$articleText = substr(utf8_decode($articleText),0,500);
Чтобы вернуть строку articleText в UTF-8, потребуется дополнительная операция:
$articleText = utf8_encode( substr(utf8_decode($articleText),0,500) );
используйте эту функцию, это сработало для меня
function substr_unicode($str, $s, $l = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l)); }
Кредиты: http://php.net/manual/en/function.mb-substr.php#107698
ms_substr () также отлично работает для удаления странных прерываний линии, которые у меня возникли после анализа кода html. Проблема не была решена:
trim()
или:
var_dump(preg_match('/^\n|\n$/', $variable));
или:
str_replace (array('\r\n', '\n', '\r'), ' ', $text)
Не поймайте.
Вы пытаетесь разрезать символ юникода. mb_substr()
я предпочитаю вместо substr()
try mb_substr()
в php.
зиЬзЬг ()
substr ( string $string , int $start [, int $length ] )
mb_substr ()
mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
Для получения дополнительной информации о substr () – Credits => Check Here