• ベストアンサー

ニュースのトピックスで見かけるアレ

現在CGI(Perl)を使用してログファイルを表示させています。 よくニュースの箇所なので見かけるのですが、長いタイトルの場合、 「~についてのニュー...」などのように「...」になっていたりしますよね? あれをやりたいのですが、どのようにすればいいのでしょうか? 単に「○文字以上は表示させないで、最後に...をくっつける」というような感じでやってるのでしょうか?

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

  • ベストアンサー
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.1

たぶんそうだと思います。 substrを使ってやるのが主な方法だと思いますが、これをやってしまうと、半角文字と全角文字が混合している文字列だと、切り取った前の文字列の中に半角文字が着数個ある場合、末尾の漢字2バイト目だけ省かれてしまうために文字化けがおこったりします。 私も過去に同じような質問をしたことがあるので、その時にアドバイスで頂いたソースをそのままここに載せますね。 $title = substr($title, 0, 20); $w = ''; $title =~ s/([\x81-\x9f\xe0-\xef].|[^\x81-\x9f\xe0-\xef])/$w.=$&/eg; $title = $w; $title .= '...'; ただし、文字コードがSJISの場合です。

w-inty
質問者

お礼

無事解決しました! ありがとうございました。

その他の回答 (1)

  • hikomin
  • ベストアンサー率63% (40/63)
回答No.2

#1さんに補足です。 Perl 5.8以上が使える環境なら、Perl自体が多バイト文字に対応しているので簡単です。 use utf8;やuse encoding 'euc-jp';とかでプログラムのコードを指定しておけば、substrで全角・半角関係なく、指定文字数分取り出せます。 $title = substr($title, 0, 20); # 全角・半角を問わず20文字取り出せる ただ、$titleがちゃんと文字列として認識出来ているか等、いろいろ考えなければならない事はありますが。(Perl 5.8を使った事がなければ、慣れるまでちょっと努力が必要です…。)

w-inty
質問者

お礼

無事解決しました! ありがとうございました。

関連するQ&A