エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)

エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)

Posted at October 16,2004 12:10 AM
Tag:[Entry, Perl, Tag]

その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に属性を設定する場合の説明を追加しました。

関連記事
トラックバックURL


トラックバック

textareaにbrタグを挿入しない from Magic White
小粋空間 エントリーにpタグとbrタグが入る仕組みを参考に、textareaタグ... [続きを読む]

Tracked on October 16, 2004 12:59 AM

blockquoteとtextareaのbr from e-Groover,log
blockquote に br が入らないのと、 エントリーを保存するときにConvert Line Breaksを解除しないと textarea にbrがつい... [続きを読む]

Tracked on October 25, 2004 6:21 PM

テキストエリアに改行などが出ないようにする from 喜怒哀楽
前の記事で、TEXTボタンを作ったたはいいが・・・ なぜか改行タグなんかがでちゃ... [続きを読む]

Tracked on November 12, 2004 3:54 PM

内での改行について from 55Link.com
エントリー投稿時に †を使うと出力ページで、タグが挿入されてしまいます。こういう... [続きを読む]

Tracked on December 31, 2004 5:25 PM

テキストエリア内の<p>やら<br> from Spicy-Chips
昨日の”月送り横カレンダー”のエントリーでうちのテンプレを<textarea>?... [続きを読む]

Tracked on January 25, 2005 5:10 PM

[カ]変な改行の修正。 from 惜賭馬 Blog
以前のブログにて、スロのテンプレを作るのに、<ul>とか<dt... [続きを読む]

Tracked on March 21, 2005 9:45 PM

[カ]TABLEタグから改行削除。 from 惜賭馬 Blog
頑張って競馬のエントリーを追加しようと、<TABLE>タグを用いた血... [続きを読む]

Tracked on March 31, 2005 11:12 PM

エントリー編集ボタン追加 from grumble
また増えました!「text」、テキストエリアボタンです。 喜怒哀楽ミッチさんの ... [続きを読む]

Tracked on June 22, 2005 3:48 PM

エントリー編集ボタン追加 from grumble
また増えました!「text」、テキストエリアボタンです。 やむやむさえらさんのエ... [続きを読む]

Tracked on June 22, 2005 3:51 PM

エントリについてくる余計なタグ達。(textarea にひっついてくる p と br) from affection.
小粋空間様の記事に『エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)』というのがあります。MTについての記事なの... [続きを読む]

Tracked on February 22, 2007 11:30 AM

MT3.2でコード表記部分に改行を入れないようにする from ネコの為に鈴は鳴る。 - After☆Taste Blog
どうもコード部分に改行が入るのが鬱陶しいので、「エントリーにpタグとbrタグが入る仕組み(その3:textareaにbrタグを挿入しない)」 : 小粋空間... [続きを読む]

Tracked on May 27, 2007 7:31 PM

Movable TypeのBlockquoteタグ from *cosmos* blog
blockquoteタグが面倒だったんです。 改行をしてくれないために、わざわざ自分でタグを入れたりして。 なんとかならんのか!?と思って調べたら・・・... [続きを読む]

Tracked on March 25, 2008 12:12 PM
コメント

さっそく使わせていただきました。
textareaタグ使うとbrはいるので、かなり困っていました。

これで、気軽に使えます♪

[1] Posted by みよたん : October 16, 2004 12:50 AM

早々のご利用&TBありがとうございます。
私もこれでやっと楽に投稿できるかなと。
追加した途端に使う機会がなくなったりして…。

[2] Posted by yujiro : October 16, 2004 1:21 AM

何度も参上いたして、恐縮です。

MTを設置して初めてTEXTタグを使った際、エリア内に改行タグなど出てしまい解決策がココにあったので、感激しています!

こちらの記事の通りに設定しましたが、テキストエリア内に空行があると、再び改行タグが表れてしまうんですね・・・。
これは、どうにもなりませんよね?

[3] Posted by ミッチ : November 12, 2004 4:05 PM

>ミッチさん
こんばんはー。
参照ありがとうございます。
おっしゃる通り、空行があるとその前の処理で</p>が挿入されてしまい、記事の最後に書いてあるケースに該当してしまうので、処理が正常に行われなくなります。

とりあえず空行に半角文字を挿入する等で対処願えますでしょうか。
よろしくお願い致します。

[4] Posted by yujiro : November 12, 2004 10:11 PM

はじめまして。
いつも色々と参考にさせていただいてます。
ありがとうございます。
トラックバックも送らせていただきます。
これからも宜しくお願いします。

[5] Posted by malilyn : January 25, 2005 5:00 PM

>malilynさん
こんにちは。
はじめまして。
記事参照&TBありがとうございます!
こちらこそ、今後ともどうぞよろしくお願い致します。

[6] Posted by yujiro : January 26, 2005 9:19 AM

はじめまして。
大変お世話になっています。
どうしても、できないので聞いていただけないでしょうか?

問題のページ、テキストエリアに改行がはいってしまいます。
Util.pmで追加したところは
if ($p !~ m@^

[7] Posted by misato : March 9, 2005 3:35 AM

>misatoさん
こんばんは。
こちらこそお世話になります。

ご質問の件ですが、textarea に属性を設定されている場合は属性を含めた形、例えば

<textarea cols="20" readonly>

のような形で追加してください。また「"」(上の例であれば2ヶ所)の前に「\」をつけてエスケープする必要があるかも知れません。なおこの点につきましては説明が不十分でしたので、本文に追加致しました。参考になれば幸いです。

以上です。
それではどうぞよろしくお願い致します。

[8] Posted by yujiro : March 10, 2005 12:51 AM

yujiro さん、ありがとうございます。
<textarea cols="20" readonly>にするのは
毎回、大変なので
cssで高さを設定して
<textarea>だけにしてやったら、できました。
ありがとうございました。

これからもっといっぱい参考にしてカスタマイズさせていただきます。

[9] Posted by misato : March 10, 2005 1:26 AM

>misatoさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでなによりです。

それでは今後ともどうぞよろしくお願い致します。

[10] Posted by yujiro : March 10, 2005 1:55 AM

参照・引用・トラックバック、そして導入させて頂きました。
mt新規立ち上げに際し、
テンプレ使わず、自力でのカスタマイズ途中にて、
少し手を加えて見栄えをチェックしようとする度に、
ping飛んじゃう模様で・・・
申し訳御座いません。(汗)

[11] Posted by NOV_oh : March 23, 2005 10:05 AM

>NOV_ohさん
はじめまして。
コメントありがとうございます。

管理メニューの「ウェブログの設定」→「設定」の「トラックバック先の自動検出を動作させる」のチェックをはずしておけばトラックバックを自動的に送信することはなくなりますよ。
それでは今後ともどうぞよろしくお願い致します。

[12] Posted by yujiro : March 24, 2005 1:44 AM

をうっと。 設定項目がちゃんとあったのですね。(汗)
ご教示有り難う御座います。
早速、チェックを外しておきました。

こちらこそ、今後とも宜しくお願い致します。

[13] Posted by NOV_oh : March 25, 2005 11:53 AM

>NOV_ohさん
こんばんは。
ご連絡くださりありがとうございました。
ではでは!

[14] Posted by yujiro : March 26, 2005 1:45 AM

WordPress2.1でも同じような現象が発生します。
WordPress2.1での修正方法はありますでしょうか? お手数ですがアドバイス宜しくお願いします。

[15] Posted by panser : February 21, 2007 3:17 PM

>panserさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件は解決されたようですね。
お役に立てず申し訳ございません。

[16] Posted by yujiro : February 22, 2007 7:11 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)