Когда я использую substr()
, я получаю странный символ в конце
$articleText = substr($articleText,0,500);
У меня есть вывод 500 символов и � ‹--
Как я могу это исправить? Это проблема с кодировкой? Мой язык греческий.
Когда я использую substr()
, я получаю странный символ в конце
$articleText = substr($articleText,0,500);
У меня есть вывод 500 символов и � ‹--
Как я могу это исправить? Это проблема с кодировкой? Мой язык греческий.
substr
считает байты, а не символы.
греческий, вероятно, означает, что вы используете какую-то многобайтовую кодировку, например UTF-8, и подсчет по байтам не совсем подходит для них.
Возможно, использование mb_substr
может помочь, здесь: mb_*
были созданы специально для многобайтовых кодировок.
mb_internal_encoding("UTF-8");
перед использованием mb_*
функций. Без добавления я все еще вижу квадраты.
- person ivkremer; 27.12.2013
mb_substr($short, 0, 75, 'utf-8')
. Тогда вам не нужно использовать mb_internal_encoding
перед mb_substr
.
- person trejder; 23.06.2014
Вместо этого используйте mb_substr
, он может работать с несколькими кодировками, а не только с однобайтовыми строками, как substr
:
$articleText = mb_substr($articleText,0,500,'UTF-8');
mb_internal_encoding('utf-8')
перед любой командой mb_*
.
- person trejder; 23.06.2014
Похоже, вы разрезаете символ Юникода пополам. Вместо этого используйте mb_substr
для нарезки строк, безопасной для Unicode.
mb_internal_encoding('utf-8')
перед или с использованием 'utf-8'
в качестве четвертого параметра mb_substr
. Doc говорит, что это необязательно, и когда оно опущено, будет использоваться значение внутренней кодировки символов, но думаю (объяснено где-то еще в документе PHP), что внутренняя кодировка PHP почти всегда отличается от кодировки вашей страницы. Таким образом, для нарезки строки UTF8 этот четвертый параметр или вызов mb_internal_encoding('utf-8')
становится обязательным.
- person trejder; 23.06.2014
Альтернативное решение для строк в кодировке 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()
or:
var_dump(preg_match('/^\n|\n$/', $variable));
or:
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() - Кредиты => Проверьте здесь