我使用这个函数来截断某些标题一定长度的结果: 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);
将返回不同的字符串lenghts上UTF8看看这些字符串:
ORIGINAL STR
个MAÏSDE 100carcaças德aviões德EMPRESAS falidasserãoretiradas德aeroportos ATEöFIM做ANO
// 98个字符
TRUNCATED STR
MAÏSDE 100carcaças德aviões德EMPRESAS falidasserãoretiradas德aeroportos吃ØFIM做...
// 94个字符 - 确定
ORIGINAL STR
NOTICIAS Transbrasil - 28 - MP颇得atuar EMaçõesfalimentares EM阙花环NAO Determina的SUAintervenção(STJ)
// 113字符
TRUNCATED STR
NOTICIAS Transbrasil - 28 - MP颇得atuar EM açõesfalimentares EM阙林雷NAO d ...
// 83个字符
这是怎么回事?为什么第二个str被截断为83个字符而不是94个字符,就像第一个字符?
谢谢。
我想是因为它的,因为某些UTF8字符由两个或三个UNICODE实体,这些差异可能是原因... – 2013-02-21 18:09:19