- ベストアンサー
ニュースのトピックスで見かけるアレ
現在CGI(Perl)を使用してログファイルを表示させています。 よくニュースの箇所なので見かけるのですが、長いタイトルの場合、 「~についてのニュー...」などのように「...」になっていたりしますよね? あれをやりたいのですが、どのようにすればいいのでしょうか? 単に「○文字以上は表示させないで、最後に...をくっつける」というような感じでやってるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たぶんそうだと思います。 substrを使ってやるのが主な方法だと思いますが、これをやってしまうと、半角文字と全角文字が混合している文字列だと、切り取った前の文字列の中に半角文字が着数個ある場合、末尾の漢字2バイト目だけ省かれてしまうために文字化けがおこったりします。 私も過去に同じような質問をしたことがあるので、その時にアドバイスで頂いたソースをそのままここに載せますね。 $title = substr($title, 0, 20); $w = ''; $title =~ s/([\x81-\x9f\xe0-\xef].|[^\x81-\x9f\xe0-\xef])/$w.=$&/eg; $title = $w; $title .= '...'; ただし、文字コードがSJISの場合です。
その他の回答 (1)
- hikomin
- ベストアンサー率63% (40/63)
#1さんに補足です。 Perl 5.8以上が使える環境なら、Perl自体が多バイト文字に対応しているので簡単です。 use utf8;やuse encoding 'euc-jp';とかでプログラムのコードを指定しておけば、substrで全角・半角関係なく、指定文字数分取り出せます。 $title = substr($title, 0, 20); # 全角・半角を問わず20文字取り出せる ただ、$titleがちゃんと文字列として認識出来ているか等、いろいろ考えなければならない事はありますが。(Perl 5.8を使った事がなければ、慣れるまでちょっと努力が必要です…。)
お礼
無事解決しました! ありがとうございました。
お礼
無事解決しました! ありがとうございました。