Я использую эту функцию, чтобы укоротить некоторые названия для определенной длины: PHP усеченного mb_substr дает разную длину результатам
function truncateUTF8($str, $length, $breakWords = TRUE, $append = '...') {
$strLength = mb_strlen($str);
if ($strLength <= $length) {
return $str;
}
if (!$breakWords) {
while ($length < $strLength AND preg_match('/^\pL$/', mb_substr($str, $length, 1))) {
$length++;
}
}
return rtrim(mb_substr($str, 0, $length)) . $append;
}
Призвание:
echo truncateUTF8($str,94);
Вернется разные строки в UTF8 длины , обратите внимание на следующие строки:
ОРИГИНАЛ STR
Маис де 100 carcaças де aviões де Empresas falidas serão retiradas де Aeroportos até о FIM сделать Ano
// 98 CHARS
усеченного STR
Маис де 100 carcaças де aviões де Empresas falidas serão retiradas де Aeroportos até о FIM сделать ...
// 94 символов - OK
ORIGINAL STR
Notícias Transbrasil - 28 - MP Pode atuar эм ações falimentares эм дие леев não determina зиа intervenção (СТП)
// 113 символов
TRUNCATED STR
Notícias Transbrasil - 28 - MP Pode atuar эм ações falimentares эм дие леев não d ...
// 83 символов
Что здесь происходит? Почему вторая str усечена на 83 символа вместо 94 символов, как первая строка?
Спасибо.
Я думаю, потому что его, потому что некоторые символы UTF8 состоит из двух или трех UNICODE лиц, эти различия могут быть причиной ... – 2013-02-21 18:09:19