2004年10月16日
●エントリーに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 での動作実績が下記エントリーにて報告されています。
textareaに属性を設定する場合の説明を追加しました。
このエントリーのトラックバックURL:
http://yujiro.dyndns.org/blog/koikikukan/mt-tb.cgi/307
トラックバック実行後、タイムアウトした旨のメッセージが表示されることがありますが、トラックバック先の処理は(これまでの経験上)正常に終了しています。正常に送信されたかどうかはトラックバック先の個別アーカイブページ等をご確認ください(タイムアウトについてはこちらの記事を参照ください)。
また同一のトラックバックが重複してしまった場合、こちらで気がついた時に適宜削除しておりますので削除のご連絡は不要です。ただし期間が空いている場合(数日とか)は気がつかない場合がありますのでご連絡ください。
≫ 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... [続きを読む]
早々のご利用&TBありがとうございます。
私もこれでやっと楽に投稿できるかなと。
追加した途端に使う機会がなくなったりして…。
何度も参上いたして、恐縮です。
MTを設置して初めてTEXTタグを使った際、エリア内に改行タグなど出てしまい解決策がココにあったので、感激しています!
こちらの記事の通りに設定しましたが、テキストエリア内に空行があると、再び改行タグが表れてしまうんですね・・・。
これは、どうにもなりませんよね?
: 2004年11月12日 16:05>ミッチさん
こんばんはー。
参照ありがとうございます。
おっしゃる通り、空行があるとその前の処理で</p>が挿入されてしまい、記事の最後に書いてあるケースに該当してしまうので、処理が正常に行われなくなります。
とりあえず空行に半角文字を挿入する等で対処願えますでしょうか。
よろしくお願い致します。
はじめまして。
いつも色々と参考にさせていただいてます。
ありがとうございます。
トラックバックも送らせていただきます。
これからも宜しくお願いします。
: 2005年01月25日 17:00>malilynさん
こんにちは。
はじめまして。
記事参照&TBありがとうございます!
こちらこそ、今後ともどうぞよろしくお願い致します。
はじめまして。
大変お世話になっています。
どうしても、できないので聞いていただけないでしょうか?
問題のページ、テキストエリアに改行がはいってしまいます。
Util.pmで追加したところは
if ($p !~ m@^
条件に「textarea」を追加
$p =~ s!((?:\G|<textarea>)[^
を
$p = "<p>$p</p>";の次に追加
何回読んでも間違いはないと思っているのですが
改行タグがはいってしまします。
(私のエントリーで半角チルダが全角になってしまっているのは
ブザウザのみで、Util.pmはきちんと半角です。)
(こちらのコメント部分の<>は、わざとです。)
3.151なんですが、原因わかりますでしょうか?
お願いします。
: 2005年03月09日 03:35>misatoさん
こんばんは。
こちらこそお世話になります。
ご質問の件ですが、textarea に属性を設定されている場合は属性を含めた形、例えば
- <textarea cols="20" readonly>
以上です。
それではどうぞよろしくお願い致します。
yujiro さん、ありがとうございます。
<textarea cols="20" readonly>にするのは
毎回、大変なので
cssで高さを設定して
<textarea>だけにしてやったら、できました。
ありがとうございました。
これからもっといっぱい参考にしてカスタマイズさせていただきます。
>misatoさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでなによりです。
それでは今後ともどうぞよろしくお願い致します。
参照・引用・トラックバック、そして導入させて頂きました。
mt新規立ち上げに際し、
テンプレ使わず、自力でのカスタマイズ途中にて、
少し手を加えて見栄えをチェックしようとする度に、
ping飛んじゃう模様で・・・
申し訳御座いません。(汗)
>NOV_ohさん
はじめまして。
コメントありがとうございます。
管理メニューの「ウェブログの設定」→「設定」の「トラックバック先の自動検出を動作させる」のチェックをはずしておけばトラックバックを自動的に送信することはなくなりますよ。
それでは今後ともどうぞよろしくお願い致します。
をうっと。 設定項目がちゃんとあったのですね。(汗)
ご教示有り難う御座います。
早速、チェックを外しておきました。
こちらこそ、今後とも宜しくお願い致します。
>NOV_ohさん
こんばんは。
ご連絡くださりありがとうございました。
ではでは!


