日本語対応トリミングフィルタ(再度バグ修正)

kubotさんより、utf-8からeuc変換前に文字数を判断してしまうと、3バイトコードがあるときに希望する文字数を得られないのではないか、というご指摘を受けました。確かにそのとおりですね。kubotさん、ありがとうございました。

というわけで、修正したコード(ほぼ、kubotさんがコメントに書いてくださったコードそのままですが・・・)を載せておきます。以前のエントリーのソースは自戒の念を込め、追記のみでそのままにしておきます。

2004/3/29追記:このスクリプトはmuraさんの記事(M’s folder: MT 長いタイトルをトリミングする)で公開されているものをEUC以外の文字コードに対応するように改変したものです。

2005/9/30追記:Encodeモジュール版はこちら

# 指定された文字数(半角文字数)にトリミングするフィルタ
package MT::Plugin::Trimj;

use MT::Template::Context;
use MT::ConfigMgr;

MT::Template::Context->add_global_filter(trimj_to => sub {

  my($str, $nstr, $ctx) = @_;
  my $sippo = '...';

  my $tmpstr = $str;

  my $c = MT::ConfigMgr->instance->PublishCharset;
  my $conv_in;
  if (lc $c eq lc 'Shift_JIS') {
    $conv_in = 'sjis';
  } elsif (lc $c eq lc 'ISO-2022-JP') {
    $conv_in = 'jis';
  } elsif (lc $c eq lc 'UTF-8') {
    $conv_in = 'utf8';
  } elsif (lc $c eq lc 'EUC-JP') {
    $conv_in = 'euc';
  }

  my $jcnv;
  eval 'use Jcode;';
  if($@){
    require 'jcode.pl';
    $jcnv = 'jcode::convert';
  }else{
    $jcnv = 'Jcode::convert';
  }
  if ($conv_in ne 'euc') {
    &$jcnv($str, 'euc', $conv_in);
  }

  # 比較をここに移動
  my $lenstr = length($str);
  if($lenstr <= $nstr) {
    return $tmpstr;
  }

  my $out = substr($str,0,$nstr);

  if ($out =~ /x8F$/ or $out =~ tr/x8ExA1-xFE// % 2) {
    chop $out;
    if($out =~ /x8F$/){
      chop $out;
    }
  }
  $out .= $sippo;
  # 尻尾を付けたくない場合は、コメントアウトのこと。

  if ($conv_in ne 'euc') {
    &$jcnv($out, $conv_in, 'euc');
  }

  return $out;
});

1;

Similar Posts:

89 Responses to “日本語対応トリミングフィルタ(再度バグ修正)”

  1. PukiWiki/TrackBack 0.1 Says:

    memo link

    辞書 R.K’s Linux Homepage / 翻訳ソフト、辞書 — 2004-01-23 (Fri) 10:24:56 辞典&辞書検索 翻訳のためのインターネットリソース ( Index ) — 2004-01-23 (Fri) 10:25:44 Syslog ログローテートツ

  2. 私は快楽なんて知らない Says:

    長いタイトルをトリミングする

    以前しようと思っていてすっかり忘れていたタイトルのトリミングをしました。 具体的には、右リンク部分の最近のコメントとトラックバック部分、IndividualArchiveとMonthlyArchiveの前後のエ

  3. POWER BLOG SIDE Says:

    「10日でおぼえるPHP入門教室」書籍について

      書こうと思ってたら上記をご覧の通り、エントリータイトルがやたら長い(^^;;最新記事としてトップページに表示されてる分には特に問題ないんだけど、サイドメニューに「最近のエントリー」っていうのがあって、そこは限られたスペースしかなくて、こういう長いタイト…

  4. SG::Acme Says:

    マルチバイトな文字列を切り詰める

    MTのtrim_toフィルタでマルチバイト文字の途中で切られてしまうのを直す

  5. re-in-car-na-tion Says:

    トリミングプラグインを改造してみる

    人生迷い箸さんのところにある日本語対応トリミングフィルタは便利なんだけど、プロポーショナルフォントだと幅=文字数ではないのでTrimする幅を決めにくかったりする。 そこで文字種から大雑把な幅を算出して一定の幅でTrimするように書き直してみた。 名付けてmt-trimj2…

  6. COLOR NO.A Says:

    長いタイトルを短く表示

    長いタイトルをサイドのメニューに表示すると、2段になってレイアウトが崩れてしまいます。 そんなときは、trim_toを使って、指定文字数分だけ表示すればいい! …はずなのですが、MovableTypeは舶来品なので、2バイト文字コードである日本語のことなんか、当然ながら考…

  7. Q&A Navi Says:

    Movable Type Memo Vol.6

    ・mt-trimj.pl   Cube さんに教えてもらい 長いタイトルをトリミング。 Melmoのエントリーは 成功! Cube さんありがとう!!でも RSSFeed は。。。 挿入したタグがおかしいのかな? 参照サイト:人生迷い箸 フィルタって自分でつくることもあるのよね。いつもダウ…

  8. skyward Says:

    文字のトリミング

    「ちょっと前に書いたもの」のところに、エントリのタイトルと本文をちょこっとだけ表示させたかったので、久々に込み入ったカスタマイズ(私にとって!)。何か思い通りにいかんなぁ…と思ったら、私、エントリの最初にリンクタグ使ってるからなのね。 こちらのエントリ…

  9. |: caramel*vanilla 2 :| Says:

    サイドバーのタイトルをトリミングする

  10. *vitalage*blog Says:

    長いタイトルをトリミングする

    カテゴリリストは長くなると見づらかったので、適当な文字数だけ表示するように変更。…

  11. おーふち Says:

    管理人様 はじめまして。

    最近MTでサイトを作り始めた、おーふちといいます。
    トップページに自分の作った複数のBLOGコンテンツの
    先頭部分だけをRSSでリンクする方法を探していて
    こちらのページにたどり着きました。
    まさしく探していた情報だ!

    しかし、悲しいかな、サイト構築歴1ヶ月の私には
    このスクリプトをどのように使ったら(組み込んだら?)
    良いのか、さっぱり????でした。

    大変恐縮ですが、このあたり教えていただけると助かり
    ます。

  12. ヴァリウム男爵 Says:

    おーふちさん、はじめまして。

    このスクリプトは、MTのプラグインとなっています。次のように設置、利用します。

    (1)
    ソースコードを、テキストエディタなどを使ってPCに保存します。ファイル名は、たとえばmt-trimj.plとします。ただし保存するときの文字コードはEUCにしてしてください。(複数の文字コードが扱えるエディタを利用するのが良いと思います)

    (2)
    FTPなどで、「(MTのディレクトリ)/plugins/」に、(1)で保存したファイルをアップロードします。

    (3)
    MTのテンプレート上で、たとえばとすればエントリのタイトルが表現されますが、これに「trimj_to=”xx”」というパラメータを追加すれば、このプラグイン機能が利用できます。「xx」には、最大文字数を入れてください。仮にとすれば、表題が20文字まで表示され、それ以降はトリムされて表示しません。デフォルトでは、トリムした場合末尾に「…」が付きます。

    こんな説明でよろしいでしょうか?

    ちなみにRSSを表示する(リンクする)との事ですが、その際別途RSS表示用のプラグインを利用されるのだとすると、その出力内容にこのプラグインが適用できるのかどうかはわかりません。

  13. おーふち Says:

    ヴァリウム男爵 さま

    ご指南、ありがとうございます。
    チャレンジしてみます。

    おーふち

  14. おーふち Says:

    先日、ご指南いただいたおーふちです。
    RSSには、RSS-JPを利用させてもらって、TitleだけでなくEntryもうまく表示されています。
    ありがとうございました。
    近々HP完成の折には、このEntryにリンクさせていただきたく。

    本当にありがとうございます。

  15. ヴァリウム男爵 Says:

    おーふちさん、こんにちは

    >RSSには、RSS-JPを利用させてもらって、Titleだけでなく
    >Entryもうまく表示されています。

    それはなによりです。:-)

  16. 機械忍者 Says:

    MT3.1でもエントリやタイトルに字数制限をかけて文字数を調整できる、その方法

    エントリ書いたはいいがタイトルが長すぎたせいで、改行され、デザインが見るも無残な姿になって「あーんもぅっ!」と思わずイヤラシイ声を漏らしてしまったアータ!
    文字数制限にLet\’s Try。
    MovableType3.1の環境下でも試しましたのでほぼ問題ないと思います。

  17. Blog VINAPARK Says:

    タイトル表示をトリミング

     エントリーのタイトルがやたら長くなったりすることもたまにはあるわけでして、そう…

  18. Jolie's Says:

    長いタイトルのトリミング

    タイトルなんてその日の気分ですから。 何文字まで入るかとか、考えたくないデスヨネ。 なのでサイドバーと、Individualアーカイブの上部に出てくるメニュー…

  19. blog:N@TURE BRAIN Says:

    Entryタイトルのトリミング

    サイドメニューをすっきりと仕上げるために、PHPの関数を使ってエントリータイトルなどのトリミングをしていましたが、負荷を考えてリビルド時に行うことにした。

  20. ROOFTOP BLOG Says:

    短い方がいいじゃない

    DISC REVIEWとかでタイトルが長くなる事がよくありがち。って事で、最近の記事やコメントのトコの長いタイトルをトリミングさせてみました。 こちらのサイトさ…

  21. Paqn! ミカニッキ Says:

    ゴッゴル絡みのトラックバックで思う事

    ゴッゴル トラックバックについて考察するページです

  22. Twinkle*Tips Says:

    Movable Type Memo Vol.6

    ・mt-trimj.pl   Cube さんに教えてもらい 長いタイトルをトリミ…

  23. chiricoyet :: MT Says:

    長くなってしまったタイトルをトリミングする方法(MT3.11)

    設置前 設置後…

  24. mayu in blog Says:

    タイトル表示のトリミング

    タイトルが長いと、サイドバーで表示された時に 自動で折れちゃったりしてせっかくの…

  25. blog @ naotaka.com Says:

    MTの長いタイトルをトリミング

    Movable Typeのエントリーに長いタイトルを付けてしまうことがよくありま…

  26. Lithium Says:

    サイドバーすっきりさせよう!

    サイドバーのRecent Commentsなどのタイトル文字が長くてレイアウトが崩れてしまうので、迷い箸さんのMovable Typeプラグイン「日本語対応トリ…

  27. yuki no hi no shimauma Says:

    MTのうっとうしい長いタイトルをトリミングしてみるの巻

     まだまだブログ自体を始めたばかりなので解らない事ばかりなのだが、とにかく新聞記…

  28. Hi:mA Says:

    こんにちは。
    素晴らしいスクリプト、ありがとうございます!
    導入させて頂いております。

    ところで、私は>MTCommentBody<にこちらのプラグインを使わせて頂いているのですが、
    remove_htmlと併用すると、
    htmlタグがモロ見えになってしまいます。

    例)こんにちは>br…

    同じ状態になった方いらっしゃいませんか?
    trim_toだとそうはならないんですが、
    『シッポ』を使いたいので悩んでおります。。。

  29. Hi:mA Says:

    連投申し訳ない。
    修正させて下さい。

    >MTCommentBody<
    →<MTCommentBody>

    例)こんにちは>br…
    →例)こんにちは<br…

    です。

  30. Dybbuk Debugs. Says:

    便利機能追加&プラグインに初チャレンジ

    日本語対応トリミングフィルタ(プラグイン)実装。&「サイドバープルダウン化」「Permlinkを変更」「画像のUpload先を指定」等便利機能追加。

  31. ヴァリウム男爵 Says:

    Hi:mAさんはじめまして。

    私のところではうまく再現しないので憶測です。もし表示されてしまうのが<br>タグのだけで、「ブログの設定」でコメントのフォーマットが「Convert Line Breaks」(改行を変換する)になっているのであれば、「convert_breaks=”0″」 を併用してみたらどうなりますでしょうか?

  32. Hi:mA Says:

    >ヴァリウム男爵さま

    早速のご回答ありがとうございました。
    ご指摘のとおり、Convert Line…を有効にしており、
    <MtCommentBody>内に
    convert_breaks=”0″とtrimj_toを併用しましたところ、
    <br>は見えなくなりました!
    ありがとうございました。

    蛇足ではあるのですが
    remove_htmlも用いると、
    アンカータグが見えてしまったり^^;
    3つの併用は無理なんですかね。。。?

    今回は誠にありがとうございました。
    こちらのサイト、plug-in以外のものも
    ちょくちょく覗かせて頂いてます。
    これからも楽しみにしております。

    それでは失礼いたします。

  33. ヴァリウム男爵 Says:

    Hi:mAさま>3つの併用は無理なんですかね。。。?

    デフォルト設定でのコンバートやサニタイズ、グローバルフィルタなどの内部での適用順とか、その辺が絡んでいるのかもしれませんね。MTのコードを追ってみれば良いんですが、なかなか暇もないので。(^^;

    少なくとも私のサイトで公開しているコードに関しては、タグなどが含まれる場合にも途中でぶった切ってしまうので、その辺は運用上の注意が必要でしょう。

    Hi:mAさんに限らず、EntryBodyやCommentBodyに利用する場合には、「convert_breaks=”0″」 を併用するのが吉だと思います。

    Hi:mAさま>これからも楽しみにしております。

    どうもありがとうございます。:)

  34. 蒼い雫をすくって Says:

    MTカスタマイズ

    ここで、カスタマイズでお世話になったblogをご紹介。 chiricoyet :…

  35. dimanche Says:

    プチリニュ

    もう12月だっていうのにコスモスはないよなぁ…(汗) 気にはしてたのですが面倒臭くってやる気が起きなかった…orz 重い…

  36. kazunoblog Says:

    長~いタイトルなんかをトリミング

    ちょっと前からやりたかったre-in-car-na-tionさんところのこれ、ようやくでけました。…

  37. strawberry photographics Says:

    長いタイトルをトリミング

    長いタイトルだとレイアウト的に微妙だったりとかするので導入してみました。 手順を…

  38. Stupid excuse!! Says:

    最近のエントリーのツリー化

    真希さんとこでエントリーのツリー化という記事がありまして。 「ほぉ。ツリー化かぁ…

  39. やむやむ Says:

    長過ぎるタイトルもすっきり一行に

    サイドバーの 最近のコメント、最近のトラックバック等で、タイトルが長過ぎて 折り…

  40. 野良犬の塒 Says:

    色々と調整

    レイアウトを中心に、細かいところを色々と修正した。 …

  41. TOY COZY MUSEUM 別館 Says:

    最近のエントリーをツリー化してみる・・・の巻。

    左サイドバーの”Recent Entries”にズラ〓っと並ぶエントリータイトル…

  42. ユキノヒノシマウマ Says:

    MTのうっとうしい長いタイトルをトリミングしてみるの巻

     まだまだブログ自体を始めたばかりなので解らない事ばかりなのだが、とにかく新聞記…

  43. miaow Says:

    はじめまして。
    知り合いのブログから情報を頂き こちらのスクリプトをお借りしました。
    見た感じも良くなってすっきりです。
    ありがとうございます。

  44. Daily note.o○ Says:

    タイトルのトリミング

    技の宝庫、mixi小粋ユーザーコミュ板で発見。 ちょっとばかり長いタイトルを付け…

  45. ヴァリウム男爵 Says:

    miaowさん、はじめまして。

    役立てて頂けたようで、なによりです。:)

  46. 今日の覚え書き Says:

    最近導入したプラグイン

    最近みなさまのblogで各要素のツリー化が大流行ですが、特に乗っかっていくつもりもなく、これもツリーっぽく見えるじゃん(…

  47. 我楽 Says:

    トリミングプラグイン。

    サイドバーの最近のトラックバックリストをツリー化に伴ってまとめたんですけど、どうもタイトルが途中で折り返されたりしてて、何だかごちゃごちゃし…

  48. SnowDrop Says:

    トリミングプラグイン

    前のブログの頃から、記事タイトルが長いとサイドバーの「Recent TrackBack」とかが複数行にまたがって表示され…

  49. 特命係長・憤慨仁 Says:

    MovableTypeのカスタマイズに奮闘…

    MovableTypeでデザインと構成をカスタマイズするも… どうも僕です。 ど…

  50. Ui-ed Says:

    トリミングフィルタ プラングイン

    両再度にエントリタイトルを表示していたが、長いタイトルの場合、改行されてしまい、…

  51. Templates Says:

    公開

    ダウンロードできるようにしました。 色違いは後ほど。。 ソース見直し中ですが、よ…

  52. GoGoSurf Says:

    長いタイトルをトリミング

    サイドバーに表示する時タイトルが長いと折り返し表示されてしまい、なんとなく見栄え…

  53. mayu*can Says:

    MTカスタマイズ: 長いタイトルをすっきり見やすく

    実は、気になっていたこのカスタマイズ。 これでサイドバーが、変な風にズラズラダラ…

  54. スヌーピーキャンディー Says:

    エントリータイトルが長い時に省略

    エントリータイトルが長すぎると サイドカラムの横幅に入りきらずに、 折り返されて…

  55. 惜賭馬 Blog Says:

    [カ]文字数削減。

    MovableTypeのカスタマイズページを色々眺めつつ、『やりたかったこと。』…

  56. gr8jun - ブログのようなもの Says:

    長いタイトルを省略して尻尾をつけたい衝動

    ちょくちょくcssあたりは弄ってはいたものの、テンプレートは殆ど見ない・・・とい…

  57. /nev/dull/Blog Says:

    日本語をトリミング trimj_to

    文字列の一部分を取り出すために trim_to というタグ属性がMTには用意され…

  58. voda FREAKS Says:

    トリミングプラグイン

    長いエントリータイトルをつけると、サイドバーのトコの表示が途中で折り返…

  59. ♪ごきげんBLOG♪ Says:

    続・トリミング

    2005年4月23日の日記に、狭いサイドバーに何行にも渡るトラックバックタイトル…

  60. スズ風呂 Says:

    長いタイトルをトリミングする

    デザイン上、どうしても文字数を制限しないと美しくない場所がある。 そんな時文字数…

  61. Old English White.com Says:

    ◎ MTカスタマイズ・メモ(mt-trimj プラグイン)

    今回、MTに改めてテンプレートを入れ直して、カスタマイズする上で、このようにエン…

  62. 1096 Says:

    初めまして。
    M’s folderさんからたどり着きました。
    こちらのスクリプト、使わせて頂きました。
    便利なもの、どうも有り難うございました。

  63. 1096 Says:

    わざわざこちらにコメントとスクリプト提示して頂いて
    有り難うございました。ちと上手くいかなかったのは
    残念ですけどね。いずれにせよ有用なTIPSを
    有り難うございます。

  64. MovableTypeを活用して脱初心者! Says:

    タイトルをトリミングする

    タイトルをトリミングするプラグインの紹介。

  65. SweetBubbles Says:

    長いエントリ名のトリミング

    エントリ名が長くて折り返されると新しいエントリの表示部分が汚くなるのでなんとかトリミングのいい方法がないかと探してみた。MTタグのtrim_toだと後ろに「…..

  66. お気楽Blog☆ Says:

    トリミングプラグイン導入

    ブログカスタムも最近楽しくて仕方がありませんw 今日は、少し時間が有ったので、ト…

  67. コマわり。 Says:

    recently_pinged_on Plugin を入れてみた。

    こちらのプラグインを使って、”最近のトラックバック”のところを変えてみました。 …

  68. Lithium Says:

    サイドバーをすっきりさせよう!

    サイドバーのRecent Commentsなどのタイトル文字が長くてレイアウトが崩れてしまうので、迷い箸さんのMovable Typeプラグイン「日本語対応トリ…

  69. Says:

    はじめまして。

    フリーライターをしている藤本壱と申します。
    現在、MTのカスタマイズに関する書籍を執筆しているところです。
    その中で、こちらの「日本語対応トリミングフィルタ」をご紹介させていただきたく思います。
    つきましては、紹介しても良いかをお知らせいただければと思います。

    以上よろしくお願いいたします。

  70. ヴァリウム男爵 Says:

    壱様、メールにて回答いたしましたのでよろしくお願いいたします。

  71. happyfreak_weblog Says:

    タイトルの文字数制限をする

    タイトルが長いと改行されてしまうので、文字数を制限しました。 ≫ 人生迷い箸 特…

  72. [嘘]Liar's web Says:

    ■長いタイトルをトリミング

    M’s folderさんのMT 長いタイトルをトリミングすると 人生迷い箸さんの…

  73. SWEET WATER Web Server Says:

    最近のエントリーをトリミング

    英語版に戻したと言う事で、最近のエントリーで利用している<$MTEntryExcerpt$>がまともに動作していない問題(英語版だからしょうがない)…

  74. delgraphixx Says:

    長いタイトルをトリミング:trimj_to

    MT3.xxではデフォルトでtrim_toというアトリビュートが使えますが、これだと文末に「…」とかがつかなくて

  75. Flan*Flan Says:

    トリミングプラグイン

    テンプレートをお借りしています EGOISMさま では、一緒にタイトルトリミング…

  76. 人生迷い箸 Says:

    日本語トリミングフィルタ(Encodeモジュール版)

    以前は Jcode モジュールを利用してましたが、Encode モジュールに書き…

  77. 腐女子のMovableTypeカスタマイズ感想文 Says:

    サイドバーの長いタイトルをトリミングする

    よくみなさんのブログで見る、長すぎるタイトルを途中まで表示させていて、ある程度の文字数で … として省略しているのをよく見かけて羨ましく思っていましたが……

  78. Hesokuri-Way×へそくりライフ Says:

    長いタイトルを省略

    長くなったタイトルの文字数を制限して表示するためのプラグインを導入。

  79. ponta web. Says:

    長いタイトルを指定した文字数にトリミングする

    「最近のコメント」を表示する部分などにエントリーのタイトルを表示させているんです…

  80. MediAhead.jp Says:

    月別アーカイブでカレンダー表示

    久しぶりのMovable Typeのカスタマイズです。 最近、日付アーカイブのテ…

  81. MediAhead.jp Says:

    サイト内検索へのリンク

    最近グルメのカテゴリーで同じお店のエントリーが増えてきたので、それらが簡単にたど…

  82. MediAhead.jp Says:

    文字列のトリミング

    人生迷い箸さんで紹介されている日本語対応トリミングフィルタをこのサイトでも使わせ…

  83. オラオラ Says:

    links for 2006-04-12

    LA1.JP (tags: CSS movabletype web…

  84. はしゅはしゅどっとねっと Says:

    タイトル等の表示文字数を制限する

    タイトル等の表示文字数を制限するMTプラグインを入れてみた。皆さんの環境でも上手く一行になっているでしょうか。

  85. 自宅サーバー構築ブログ Says:

    第12回:文字列の長いエントリーをトリミングする

    第11回は、パンくずリストを設置する方法について説明しました。今回は、文字列の長…

  86. ABEKE - Design side - Says:

    MT3.3をインストールしてみました。

    遅ればせながらMT3.3をインストールしてみました。 結構前にリリースされたのは…

  87. MovableTypeを活用して脱初心者! Says:

    タイトルをトリミングする

    タイトルをトリミングするプラグインの紹介。

  88. syukoclip Says:

    syukoclipで使用したプラグイン

    当サイト、syukoclipで使用したプラグインの一覧です。 …

  89. MovableType備忘録 Says:

    テンプレート MT.1 for Movable Type 4

    こんにちわ^^ 先日、寝室のエアコンのリモコンが壊れてしまったため、ビックカメラで買ってきました。 本体はまだ使えそうなのに、リモコンが壊れた…

Leave a Reply