• ベストアンサー

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

現在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

  • 受け取った変数がファイルに書き込めない

    Perlで質問があります。 Perlでフォームから受け取った変数の値($title = “333”)を別にCGI 投げます。Printでは問題なく変数の中身が表示されるのですが Txtに書き込もうとするとうまくいきません。 ちなみに行頭で$title = “333”;すると書き込めます。 うまく受け渡しができていないのでしょうか? 以下ソースです。 #!/usr/bin/perl -w require 'lib.pl'; #########i一応lib.plの中身######### $q = new CGI; $q->charset('EUC-JP'); print $q->header; $title = $q->param('title'); ################################## use CGI; my $fname = 'news.txt'; open(FILE, ">>$fname") or die; print FILE $title ; close(FILE);

  • RSSリーダーのCGIによる文字化け

    問題はCGI使用の際、一部文字化けしてすまうことです。 RSSリーダーからlog出力の際に文字化けしてしまうようです。 http://www.candy-cgi.com/perl/RSS_reader_Type1.html こちらのCGIを利用しているのですが、構造を見てみると 1.RSSファイルをメインCGIが数分ごとに処理→2.logファイルに出力→3メインCGIがそれをHTML化して書き出す という風になってるようなのですが、1から2にかけて、ある文字が文字化けしてしまいます。 具体的には「~」の文字が「?」に変わってしまうのです。 もっと具体的に言えば、「もみあげちゃ~しゅ~」→が「もみあげちゃ?しゅ?」となります。 それ以外の文字はいまのところ文字化けするのを確認しておりません。 logファイルに書き出される時点で文字化けしているので、htmlに文字コードをきちんと書き記すなどの対策は効果がありませんでした。 解決ヒントになりそうなことでもあったら、よろしくお願いします。

    • ベストアンサー
    • CGI
  • 全角・半角が混じったテキストの100文字以上を"・・・"にしたい

    perl5.8.5でCGIのプログラムを作っています。 全角・半角が混じったテキストの100文字以上を"・・・"にしたいと思っています。 プログラムの文字コードはEUCで書いています。 文字数の取得は、Jcodeを使って出しています。 $len = Jcode->new( $text )->jlength; これで100文字以上なら100文字以上の部分を削除して"・・・"を付け足すという感じにしたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 最終更新日自動取得のようなCGIは難しいでしょうか

    お世話になります。 掲示板のログを、CGIにアクセスしただけで表示させたいと思っています。 掲示板CGIの中に下記の記述を加えているため、掲示板の中で表示させたい箇所に$allnumberと記述する事で、投稿記事の総数を表示できるようになっています。 -------------------- #総投記事数を表示 open(FH, "$room/log.cgi") or die; my $line = <FH>; my( $allnumber ) = $line =~ /^(?d*)/; close(FH); -------------------- マルチ掲示板CGIを使用しているので、$roomには各掲示板のIDが入力されます。 各掲示板の投稿数を表示する、単独のCGIスクリプトは難しいでしょうか。 最終更新日を自動的に取得して、表示するCGIのイメージです。 これらのCGI(仮に「lastup.cgi」とします)は、http://hogehoge.jp/lastup.cgi?./bbs/log.cgiと最終更新日を取得したいファイルを指定して、htmlファイルの表示させたい箇所に記述すると、指定したファイルの最終更新日が表示できるようになっているCGIがあります。 (※「./bbs/log.cgi」は、lastup.cgiから見た対象ファイルまでのパスです) (※「log.cgi」は、掲示板のログが保存されているファイルとします) このように、「http://hogehoge.com/~.cgi?./(掲示板ID)/log.cgi」と記述するだけで、htmlの好きな箇所に指定した掲示板の記事数を表示させるようなCGIはできないでしょうか。 私はこれまでにCGIをいくつか設置した経験や、改造した経験はありますが、いつもネットで検索して分かる範囲で簡単な改造しかできません。 お手数ではありますが、できる限り詳しく教えて頂けると嬉しく思います。 お力添えを頂けると助かります。 何卒、よろしく御願い致します。

  • CGI(BBS)の設置が出来ません(2)

    --------------------↓ # ログディレクトリ (フルパスだと / から) $log_dir = "."; ↑これは「/bbs.log」と入れるのでしょうか? ちなみに上記全ての書類はcgi-binで同階層です。 # 表示ファイルディレクトリ (フルパスだと / から) $htm_dir = "."; ↑これもよく分かりません。 # CGIスクリプト自身をURLで指定 $script = "http://www.●●●.ne.jp/cgi-bin/lomobbs.cgi"; ↑の様に入れましたが合っていますでしょうか? # 表示ファイル (index.html) のある「ディレクトリ」をURLで指定 $htm_url = "http://www.●●●.ne.jp/cgi-bin"; # ログファイル名 $logfile = "bbs.log"; # ロックファイル名 $lockfile = './bbs.lock'; # 過去ログのあるディレクトリ (フルパスだと / から) $past_dir = "."; # 補助プログラムのファイル名 $subfile = './bbs2.cgi'; ---------------------------- 以上、アヤシイ個所を書いてみました。 おかしな個所があれば教えてください。 ちなみに、DLしたcgiの書類名を変更したのですが、 それは何か影響はありますか? いくらやり直してもページが表示されません。

    • 締切済み
    • CGI
  • ログファイルの検索

    たとえばログファイルに NO=1&TITLE=aa&MESSAGE=テスト1です<BR><BR><BR>ためし!!= NO=2&TITLE=aa&MESSAGE=テストの3です。<BR>TEST= というように入っていたとします。 HTMLファイルでもcgiファイルでもいいのですが、たとえば「1」と入力したら NO=1が検索されて表示されるようなものを作成するにはどのようにしたらいいのでしょうか? よろしくお願いします。 #perlです。

    • ベストアンサー
    • CGI
  • ファイルを読み込んで特定の箇所のデータを表示

    お世話になります。 掲示板のログファイルから、特定の箇所のデータを取得して表示させたいと思っています。 log.cgi(パーミッション666) ログデータの中身 3<><><> 3<><><><><><><> 2<><><><><><><> 1<><><><><><><> 上記のような感じになっており、「<>」と「<>」の間にいろいろなデータが入っています。 1行目の最初の数字が、これまで投稿された記事総数になっており、この数字を取得したいと思っています。 log.cgiを読み込んで、この記事総数を「$allnumber」と記述すれば、その箇所に表示させるにはどのようにすれば良いでしょうか。 ご教授をお願い致します。

    • ベストアンサー
    • Perl
  • cgi(perl)を実行のみしたい

    HTMLよりCGI(PERL)を起動し、ログファイルの読み書きを実行し、そのまま終了させることは出来ないでしょうか? CGIからデータを戻す必要は無く、ブラウザへの表示はHTMLファイルがそのまま表示される形で問題ありません。 宜しくお願いします。

  • 空のファイル

    PERLでcgiを作っているんですが、 空のファイルはどうやったら作れますか? log1.dat log2.dat log3.dat といった空のファイルを作りたいのですが・・・。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • パスワードフォームの作成方法について

    前回パスワードに件で質問させて頂いた時に http://www.kent-web.com/pwd/gate.html? を参考に、事でしたのですが、どうしても わからない所がありましてすみませんが 意味を教えて頂けませんか。 1. #!/usr/local/bin/perl  (プロバイダで定められたPerlへのパスを指定します)  プロバイダーにどこように聞けばいいのでしょうか?現在JCOMを使用しています 2. 以上、修正が完了したら対象ファイルを指定のディレクトリへ「テキストモード」でFTP転送したのち、以下のとおり アクセス権 を設定して下さい。 対象ファイル アクセス権 gate.cgi 755 log1.cgi 666 log2.cgi 666 secret.html 644 lockディレクトリ 777 どこにどのように設定すればいいのでしょうか? すみませんが、アドバイスをよろしくお願いします。 意味がよくわからないかもしれませんので できれば、質問をお願いします。