Reputation: 8823
I'm using this function to truncate some titles to a specific length:
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;
}
Calling:
echo truncateUTF8($str,94);
Will return different string lenghts on UTF8 strings, take a look at these strings:
ORIGINAL STR
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do ano
// 98 chars
TRUNCATED STR
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do...
// 94 chars - ok
ORIGINAL STR
Notícias Transbrasil – 28 – MP pode atuar em ações falimentares em que a lei não determina sua intervenção (STJ)
// 113 chars
TRUNCATED STR
Notícias Transbrasil – 28 – MP pode atuar em ações falimentares em que a lei não d...
// 83 chars
What's going on here? Why's the second str truncated at 83 chars instead of 94 chars, like the first str?
Thanks.
Upvotes: 1
Views: 502
Reputation: 1805
Try it
function truncateUTF8($str, $length, $breakWords = TRUE, $append = '...') {
$strLength = mb_strlen($str);
if ($strLength <= $length)
return $str;
return preg_replace('/(.{' . $length . '}).*/u', '$1' . $append, $str);
}
Upvotes: 1