エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)
その2では特定のタグに対して常に改行タグを挿入する方法について述べましたが、今回は逆に改行タグを挿入しない方法について記します。
エントリーに <textarea>~</textarea> や <pre>~</pre> 等、内部情報に改行タグを挿入したくないタグを使用する場合があります。が現状の動作では、例えばpreタグは改行タグが挿入されないよう、
- lib/MT/Util.pm
の html_text_transform の条件式に
sub html_text_transform {
my $str = shift;
$str ||= '';
my @paras = split /\r?\n\r?\n/, $str;
for my $p (@paras) {
if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|blockquote|fieldset|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
}
}
join "\n\n", @paras;
}
としっかり設定(青色部分)されていますが、直前の行が空行でなければ期待する動作になりません。textareaタグは条件式に設定すらされていないので一律挿入されます。
こういう時のため(?)に、エントリー編集画面の下に「テキストフォーマット」が用意されているようで、この選択を「Convert Line Breaks」から「なし」に変更することでエントリーには改行タグが一律設定されなくなります。
しかし逆に他のテキスト行に改行タグを自前で付与しなければならず、結構面倒です。また「なし」にしなければならない設定を「Convert Line Breaks」のまま登録してしまい、textarea内をbrタグだらけにしてしまうという失敗もやらかしました。
できればどのエントリーも「Convert Line Breaks」のまま記述でき、なおかつ特定のタグに括られた部分は改行タグを挿入したくないところです。
ということで対処してみました。前回までのような鬱陶しい説明はございません(というか既に十分長い前置きですが(笑))。
先の html_text_transform の
$p = "<p>$p</p>";
の次の行に
$p =~ s!((?:\G|<textarea>)[^<]*?)<br />!$1!g;
を追加すれば <textarea>~</textarea> 間にある改行タグを削除します。条件式にも一応 "textarea" を追加おくと良いでしょう。
なお textarea タグに属性を付与する場合は上記の <textarea> にも属性を記述して、文字列が完全にマッチするように修正してください。例えば <textarea cols="50" rows="10" readonly> というタグを記述されのであれば、スクリプトを
$p =~ s!((?:\G|<textarea cols="50" rows="10" readonly>)[^<]*?)<br />!$1!g;
とする必要があります。
他のタグを追加する場合は、追加した行の "textarea" を "(" と ")" で括り、該当のタグ文字を "|" で区切って追加します(下記はpreを追加する例です)。
$p =~ s!((?:\G|<(textarea|pre)>)[^<]*?)<br />!$1!g;
なお該当のタグ内に別のタグ(というか"<")が存在する(例えば <textarea>~<hoge>~</hoge>~</textarea>)場合は正常に動作しませんので予めご容赦ください。
このシリーズは以上です。
2004.10.23 追記
3.11-ja での動作実績が下記エントリーにて報告されています。
2005.03.10 追記
textareaに属性を設定する場合の説明を追加しました。
- ブログ記事ページでその記事以外のブログ記事一覧を表示する方法
- MTEntriesタグをテンプレートで複数使う時に記事を重複させない方法
- Movable Type5.2のTinyMCEを5.1のボタンに戻す方法
- Movable Typeで製品情報のテーブルを作る
- Movable Typeのブログ記事ページのファイル名に日別の通番を振る
- 予定日を過ぎたブログ記事を「最近のブログ記事」に表示しない
- mt-csv2customfields v0.03
- 複数ブログのブログ記事を時間順に1件ずつ表示する
- Movable Type のブログ記事にフラグメント識別子(ページ内リンク)を設定する
- 特定のカテゴリーに属するブログ記事一覧を表示する(改)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
- ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改)
- ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)
- 概要と本文を切り替える(Movable Type 4・デフォルトテンプレート版)
≫ textareaにbrタグを挿入しない from Magic White
小粋空間 エントリーにpタグとbrタグが入る仕組みを参考に、textareaタグ... [続きを読む]
≫ blockquoteとtextareaのbr from e-Groover,log
blockquote に br が入らないのと、 エントリーを保存するときにConvert Line Breaksを解除しないと textarea にbrがつい... [続きを読む]
≫ テキストエリアに改行などが出ないようにする from 喜怒哀楽
前の記事で、TEXTボタンを作ったたはいいが・・・ なぜか改行タグなんかがでちゃ... [続きを読む]
≫ 内での改行について from 55Link.com
エントリー投稿時に †を使うと出力ページで、タグが挿入されてしまいます。こういう... [続きを読む]
≫ テキストエリア内の<p>やら<br> from Spicy-Chips
昨日の”月送り横カレンダー”のエントリーでうちのテンプレを<textarea>?... [続きを読む]
≫ [カ]変な改行の修正。 from 惜賭馬 Blog
以前のブログにて、スロのテンプレを作るのに、<ul>とか<dt... [続きを読む]
≫ [カ]TABLEタグから改行削除。 from 惜賭馬 Blog
頑張って競馬のエントリーを追加しようと、<TABLE>タグを用いた血... [続きを読む]
≫ エントリー編集ボタン追加 from grumble
また増えました!「text」、テキストエリアボタンです。 喜怒哀楽ミッチさんの ... [続きを読む]
≫ エントリー編集ボタン追加 from grumble
また増えました!「text」、テキストエリアボタンです。 やむやむさえらさんのエ... [続きを読む]
≫ エントリについてくる余計なタグ達。(textarea にひっついてくる p と br) from affection.
小粋空間様の記事に『エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)』というのがあります。MTについての記事なの... [続きを読む]
≫ MT3.2でコード表記部分に改行を入れないようにする from ネコの為に鈴は鳴る。 - After☆Taste Blog
どうもコード部分に改行が入るのが鬱陶しいので、「エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)」 : 小粋空間... [続きを読む]
≫ Movable TypeのBlockquoteタグ from *cosmos* blog
blockquoteタグが面倒だったんです。
改行をしてくれないために、わざわざ自分でタグを入れたりして。
なんとかならんのか!?と思って調べたら・・・... [続きを読む]
さっそく使わせていただきました。
textareaタグ使うとbrはいるので、かなり困っていました。
これで、気軽に使えます♪
早々のご利用&TBありがとうございます。
私もこれでやっと楽に投稿できるかなと。
追加した途端に使う機会がなくなったりして…。
何度も参上いたして、恐縮です。
MTを設置して初めてTEXTタグを使った際、エリア内に改行タグなど出てしまい解決策がココにあったので、感激しています!
こちらの記事の通りに設定しましたが、テキストエリア内に空行があると、再び改行タグが表れてしまうんですね・・・。
これは、どうにもなりませんよね?
>ミッチさん
こんばんはー。
参照ありがとうございます。
おっしゃる通り、空行があるとその前の処理で</p>が挿入されてしまい、記事の最後に書いてあるケースに該当してしまうので、処理が正常に行われなくなります。
とりあえず空行に半角文字を挿入する等で対処願えますでしょうか。
よろしくお願い致します。
はじめまして。
いつも色々と参考にさせていただいてます。
ありがとうございます。
トラックバックも送らせていただきます。
これからも宜しくお願いします。
>malilynさん
こんにちは。
はじめまして。
記事参照&TBありがとうございます!
こちらこそ、今後ともどうぞよろしくお願い致します。
はじめまして。
大変お世話になっています。
どうしても、できないので聞いていただけないでしょうか?
問題のページ、テキストエリアに改行がはいってしまいます。
Util.pmで追加したところは
if ($p !~ m@^
>misatoさん
こんばんは。
こちらこそお世話になります。
ご質問の件ですが、textarea に属性を設定されている場合は属性を含めた形、例えば
<textarea cols="20" readonly>
のような形で追加してください。また「"」(上の例であれば2ヶ所)の前に「\」をつけてエスケープする必要があるかも知れません。なおこの点につきましては説明が不十分でしたので、本文に追加致しました。参考になれば幸いです。
以上です。
それではどうぞよろしくお願い致します。
yujiro さん、ありがとうございます。
<textarea cols="20" readonly>にするのは
毎回、大変なので
cssで高さを設定して
<textarea>だけにしてやったら、できました。
ありがとうございました。
これからもっといっぱい参考にしてカスタマイズさせていただきます。
>misatoさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでなによりです。
それでは今後ともどうぞよろしくお願い致します。
参照・引用・トラックバック、そして導入させて頂きました。
mt新規立ち上げに際し、
テンプレ使わず、自力でのカスタマイズ途中にて、
少し手を加えて見栄えをチェックしようとする度に、
ping飛んじゃう模様で・・・
申し訳御座いません。(汗)
>NOV_ohさん
はじめまして。
コメントありがとうございます。
管理メニューの「ウェブログの設定」→「設定」の「トラックバック先の自動検出を動作させる」のチェックをはずしておけばトラックバックを自動的に送信することはなくなりますよ。
それでは今後ともどうぞよろしくお願い致します。
をうっと。 設定項目がちゃんとあったのですね。(汗)
ご教示有り難う御座います。
早速、チェックを外しておきました。
こちらこそ、今後とも宜しくお願い致します。
>NOV_ohさん
こんばんは。
ご連絡くださりありがとうございました。
ではでは!
WordPress2.1でも同じような現象が発生します。
WordPress2.1での修正方法はありますでしょうか? お手数ですがアドバイス宜しくお願いします。
>panserさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件は解決されたようですね。
お役に立てず申し訳ございません。