32文字を超える文字列を「...」に置き換える次の関数があります。私の問題は、ウムラウトが 29 番目から 33 番目の文字の範囲にある場合、奇妙な文字で表されることです。変数 $length に入れる数値の長さにもかかわらず、ウムラウト全体を壊さずに表示するように関数を変更するにはどうすればよいですか?
たとえば、für の前に 31 文字ありますが、以下の関数を使用すると、31 文字プラス für が得られます。
function textLimit($string, $length, $replacer = '...')
{
if(strlen($string) > $length)
return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
return $string;
}