質問させてください。

$str = mb_strimwidth($str,0,18,'...');
上記のように記述し$str(日本語文字列)を9文字で切りたいのですが、
$strにスペースや・が含まれていると7文字しか入らず、
最後に文字化けした文字が付きます。
なぜこのような現象が発生するのでしょうか。
また、どう記述すれば文字化けせずに表示されますか?