Ошибка функции PHP substr ()
когда я использую substr()
Я получаю странный персонаж в конце
$articleText = substr($articleText,0,500);
у меня есть выход 500 символов и �
Как я могу это исправить? Это проблема кодирования? Мой язык-греческий.
7 ответов
substr
подсчитывает, используя байты, а не символы.
греческий, вероятно, означает, что вы используете какую-то многобайтовую кодировку, например UTF-8-и подсчет на байты не совсем хорош для них.
может быть, используя mb_substr
могу помочь, здесь:mb_*
функции были созданы специально для многобайтных кодировок.
Похоже, вы разрезаете символ Юникода пополам. Использовать 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 () -Кредиты => Регистрация Здесь