• ベストアンサー

長文の最後の文字をキレイにカットしたい

あいうえおかきくけこ ↓ あいう... としたいのですが、 あいう・.. となってしまいます。 [使用した命令] $str = 'あいうえおかきくけこ'; $tmp = substr($str,0,7); $tmp .= '...'; 半角が混じるケースもありますので、$tmp = substr($str,0,6);とするのではなくて、末尾の日本語をきれいに処理する方法を知りたいのですが、どなたかご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

日本語を扱う場合、文字コードによって処理が変わってきます。 EUC と SJIS 用に日本語の切れ端を落とす関数を作ってみたので、abiruさんが必要な方を試してみてください。 EUC用 http://www.din.or.jp/~ohzaki/perl.htm#JP_Cut の方法を利用します。 3byteのEUCも考慮し、if ではなく while を使っています。  sub jspank {    local $_ = shift;    chop while (/\x8F$/ or tr/\x8E\xA1-\xFE// % 2);    $_;  } SJIS用 シフトJISでは2バイト文字の途中かどうかを文字列の末尾や途中だけでは判断できないので、先頭からチェックします。  sub jspank {    local $_ = shift;    chop unless /^(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F\xA1-\xDF])*$/;    $_;  } 利用方法  $str = 'あいうえおかきくけこ';  $tmp = jspank(substr($str,0,7));  $tmp .= '...'; ※インデントに全角空白を使っているので、コピーする際はタブなどに置き換えてください。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#JP_Cut
abiru
質問者

お礼

うまくいきました。 ありがとうございました。m(_ _)m

すると、全ての回答が全文表示されます。

関連するQ&A