• 締切済み

substrの使い方

文字列の一部だけを表示するため「substr」を利用しようとしていますが、うまくできません。 問題となっているのは2点です。 1.半角英数のみと日本語のみで長さが全然違う。 2.半角英数+日本語で日本語で切れるとき、最後の文字が文字化けする。 これを解決したいのですが、どうしたらよいでしょうか? 現状は以下のようになっています。 #文字数を指定 $mc = 38; #題名を短くする if (length($title) > $mc) {   $title = substr($title,0,$mc);   $title .= "..."; }

みんなの回答

回答No.1

substr は、 バイトでの切り出しを行います。 よって >1.半角英数のみと日本語のみで長さが全然違う。 半角英数(1バイトコード)と日本語(マルチバイト)では 切り出した後のバイト数は同じでも人間が見た文字数は異なります。 #日本語1文字は、SJIS,EUCコードで2byte、UTF-8で3byteです >2.半角英数+日本語で日本語で切れるとき、最後の文字が文字化けする。 バイトで切り分けますので、マルチバイト文字の途中で切られた 文字は文字化けします。 詳しくは、Googleなどでperl マルチバイト で検索してみてください。