【发布时间】:2013-02-21 18:06:00
【问题描述】:
我正在使用此函数将某些标题截断为特定长度:
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 字符串上返回不同的字符串长度,看看这些字符串:
原始字符串
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do ano
// 98 个字符
截断字符串
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do...
// 94 chars - 好的
原始字符串
Notícias Transbrasil – 28 – MP pode atuar em ações falimentares em que a lei não determina sua intervenção (STJ)
// 113 个字符
截断字符串
Notícias Transbrasil – 28 – MP pode atuar em ações falimentares em que a lei não d...
// 83 chars
这里发生了什么?为什么第二个字符串被截断为 83 个字符而不是 94 个字符,就像第一个字符串一样?
谢谢。
【问题讨论】:
-
我认为是因为某些 UTF8 字符由两个或三个 UNICODE 实体组成,这些差异可能是原因...