1

この関数を使用して、一部のタイトルを特定の長さに切り詰めています。

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 文字列では異なる文字列の長さを返します。これらの文字列を見てください。

ORIGINAL STR
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do ano
// 98 文字

TRUNCATED STR
Mais de 100 carcaças de aviões de empresas falidas serão retiradas de aeroportos até o fim do...
// 94 文字- 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 文字

TRUNCATED STR
Notícias Transbrasil – 28 – MP pode atuar em ações falimentares em que a lei não d...
// 83 文字

何が起きてる?最初の str のように、2 番目の str が 94 文字ではなく 83 文字で切り捨てられているのはなぜですか?

ありがとう。

4

1 に答える 1

1

それを試してみてください

function truncateUTF8($str, $length, $breakWords = TRUE, $append = '...') {
    $strLength = mb_strlen($str);
    if ($strLength <= $length)
       return $str;
    return preg_replace('/(.{' . $length . '}).*/u', '$1' .  $append, $str);
}
于 2013-02-21T18:23:26.527 に答える