Ошибка функции PHP substr ()

когда я использую substr() Я получаю странный персонаж в конце

$articleText = substr($articleText,0,500);

у меня есть выход 500 символов и �

Как я могу это исправить? Это проблема кодирования? Мой язык-греческий.

7 ответов


substr подсчитывает, используя байты, а не символы.

греческий, вероятно, означает, что вы используете какую-то многобайтовую кодировку, например UTF-8-и подсчет на байты не совсем хорош для них.

может быть, используя mb_substr могу помочь, здесь:mb_* функции были созданы специально для многобайтных кодировок.


использовать mb_substr вместо этого он может иметь дело с несколькими кодировками, а не только с однобайтовыми строками как substr:

$articleText = mb_substr($articleText,0,500,'UTF-8');

Похоже, вы разрезаете символ Юникода пополам. Использовать mb_substr вместо этого для Unicode-безопасного нарезания строк.


альтернативное решение для строк с кодировкой 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)

не поймать.


вы пытаетесь вырезать символ Юникода.Поэтому я предпочел вместо substr() попробовать mb_substr() в php.

substr ()

substr ( string $string , int $start [, int $length ] )

mb_substr ()

mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

для получения дополнительной информации для substr () -Кредиты => Регистрация Здесь