エントリーにpタグとbrタグが入る仕組み(その2:blockquoteにbrタグを挿入)
現状の Movable Type の振る舞いでは、エントリーのblockquote開始タグの直前の行に
- 何もない(=エントリーの先頭)
- 文字がある(=段落の途中にblockquoteが存在)
- 空行が1行ある
- 空行が2行ある
という状態によってpタグおよびbrタグの与えられ方が変化します。
上記のケース順に記した下記のエントリーがあるとします。
<blockquote>あいうえお
あいうえお
あいうえお</blockquote>
←空行
かきくけこ
<blockquote>かきくけこ
かきくけこ
かきくけこ</blockquote>
←空行
<blockquote>さしすせそ
さしすせそ
さしすせそ</blockquote>
←空行
←空行
<blockquote>たちつてと
たちつてと
たちつてと</blockquote>
これを保存すると、pタグおよびbrタグは次のように付与されます。
<blockquote>あいうえお
あいうえお
あいうえお</blockquote>
←空行
<p>かきくけこ<br />
<blockquote>かきくけこ<br />
かきくけこ<br />
かきくけこ</blockquote></p>
←空行
<blockquote>さしすせそ
さしすせそ
さしすせそ</blockquote>
←空行
<p><br />
<blockquote>たちつてと<br />
たちつてと<br />
たちつてと</blockquote></p>
2と4の場合は期待する結果になりますが、1と3の場合は改行が付与されません。いずれもエントリーにpタグとbrタグが入る仕組み(その1)に記した通りの動作です。
空行が2行の場合について補足致しますと、段落は連続した改行("\n\n"または"\r\n\r\n")で区切られるため、3つめの改行は段落内の文字として認識されます。つまりblockquoteタグの前に(空の)文字が存在する状態になるため改行タグが付与されます。2行あった空行は、後の1行が段落内の文字として扱われるため1行になります。空行下の <p><br /> に変換されている部分が昔、空行だった行です。
余談ですがこのロジックでは空行が偶数であれば改行タグが一律付与され、奇数の空行の場合は(条件に記されたタグは)付与されないという現象が発生します。
Movable Type における改行タグの挿入方法は、HTMLを記述する際に「タグの直前に空行が存在する」というお作法が前提になっていますが、エントリーに挿入した改行と同じ位置に改行タグの挿入を期待するユーザにとっては混乱を招く原因になっているように思われます。
改行を挿入する方法は他のサイトでも紹介されていますが、個人的には "blockquote" を条件式から除外別の条件式を作って br タグのみ付与する方法を採っています。
具体的には、lib/MT/Util.pmのhtml_text_transform(下記)
for my $p (@paras) {
if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|blockquote|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
}
}
に青色部分の
for my $p (@paras) {
if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|blockquote|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
} elsif ($p =~ m@^</?(?:blockquote)@) {
$p =~ s!?r??n!<br />?n!g;
}
}
を追加する方法を推奨します。
blockquote タグは p タグで括ることが禁止されているブロック要素ですが、この方法であれば、p タグで括られずに br タグを付与することができます。
同様に br タグのみを付与したいタグがあれば、blckquote と同様、上記の追加コードに該当のタグ名を追加してください。同様に、brタグを一律付与したいタグは条件から外すのが手っ取り早いと思います。(つづく)
2004.10.23 追記
3.11-ja での動作実績が下記エントリーにて報告されています。
2006.08.13 追記
blockquote 改変方法を変更しました。
- ブログ記事ページでその記事以外のブログ記事一覧を表示する方法
- 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・デフォルトテンプレート版)
≫ Movable Type 3.11-ja アップグレード。【追記】 from 我楽
エントリー投稿画面で、3.01D-jaの時に加工してたやつがパーになったので、ちょちょいと変更。 ”テキストフォーマット:改行を変換する”設... [続きを読む]
≫ 3.1にしたらおかしくなった。 from Hitori-goto
第3弾くらいかな?? 今度は、変にPタグが付くんです! の、巻。 Block Quoteで、Pが付いたり、で、 何か、おかしいのです。 (スタイルシートで気づい... [続きを読む]
≫ pタグとbrタグ from mocha
MTって妙なところでややこしいんです。素直じゃないっつーか。マニュアルによるとテ... [続きを読む]
≫ リヌってみました from dimanche
IEだと問題はなかったのですが、Firefoxだと表示がおかしくなっちゃってどうしたものかと思ってたんです。今日は朝から... [続きを読む]
≫ blockquoteタグの中での改行 from Internet Zone::Movable TypeでBlog生活
MT 3.11-jpじゃあ“blockquoteタグの中では改行タグが効かないなあ…”と諦めていたのですが、解決策があることを知りました。さっそく挑戦してみます... [続きを読む]
≫ blockquoteタグの中での改行 from Internet Zone::Movable TypeでBlog生活
MT 3.11-jpじゃあ“blockquoteタグの中では改行タグが効かないなあ…”と諦めていたのですが、解決策があることを知りました。さっそく挑戦してみます... [続きを読む]
≫ MTでのblockquoteタグ from Notebook :: Hibi no Note
Movable Type を 2.66 → 3.11 にバージョンアップして、す... [続きを読む]
≫ MTクイックポストで引用を正しく表示させる2 from Sato-Tetsuya BLOG
さらに、引用文中の改行を正しく反映させるためにこちらの説明どおりにカスタマイズし... [続きを読む]
≫ ほんのちょっぴり from Dybbuk Debugs.
以前からblockquoteを使用したときに改行が入ったり入らなかったりする気がして少し調べてみたら小粋空間さんに対応策が掲載されていたので、早速取り入れてみた... [続きを読む]
≫ 【blockquote】内の改行方法を変更 from MandraChips
以前から、【blockquote】内の改行がエントリー入力時とは同じ位置に挿入さ... [続きを読む]
≫ [カ]変な改行の修正。 from 惜賭馬 Blog
以前のブログにて、スロのテンプレを作るのに、<ul>とか<dt... [続きを読む]
≫ ダイナミックパブリッシングとblockquoteのbr from e-Groover,log
以前、小粋空間さんの エントリーにpタグとbrタグが入る仕組み(その2:bloc... [続きを読む]
≫ div内でも改行できるように from Project MultiBurst
以前、カスタマイズで「エントリー画面でdivを挿入する」というのを書いたのですが、 div内の文章の改行が無くなってしまうんです。 理由がわからず、結局スタイル... [続きを読む]
≫ 引用文も自動的に改行したい from いろんなことが起こる
エントリーに書く文章は「改行を変換する」設定にしているんだけど(設定 > 新規投... [続きを読む]
≫ blockquoteタグ利用時のbrタグ付与法則変更 from ネコの為に鈴は鳴る。 - After☆Taste Blog
MTでは改行自動変換時、なにやら変わった法則に則ってbrタグを付与している模様。... [続きを読む]
≫ MT3.2 blockquote 要素 その 2 from LaCoocanでMT3.2の導入・カスタマイズ
小粋空間: エントリーにpタグとbrタグが入る仕組み(その2:blockquot... [続きを読む]
≫ Movable Type エントリー内で divタグ を使う from log
エントリーの中で<div>タグを使用すると、その中に書いた記事で改行したときに反映せず、横つながりになってしまう。そのままでは困るので調べたと... [続きを読む]
≫ Movable TypeのBlockquoteタグ from *cosmos* blog
blockquoteタグが面倒だったんです。
改行をしてくれないために、わざわざ自分でタグを入れたりして。
なんとかならんのか!?と思って調べたら・・・... [続きを読む]
yujiroさんこんにちは。
このTips1?3は僕の積年抱えている問題を解決してくれそうです。ありがとうございます。
はじめまして。
ネタ稼ぎに書いたのですがお役に立てたようで幸いです。
3.11用テンプレート作成の際にはHINAGATAさんの記事を参考にさせていただきたいと思ってます。
それでは今後ともどうぞよろしくお願い致します。
TBがうまくいかず、などもTBを送ることになってしまい、申し訳ありませんでした。blockquoteタグの中の改行処理がうまくゆかず悩んでおりましたが、これで悩み解消です。ありがとうございました。
>GAKUさん
はじめまして。
記事参照くださりありがとうございました!
またBlogPeople登録ありがとうございました。
こちらからも登録させて頂きましたので、今後ともどうぞよろしくお願い致します。
#TB重複は削除しておきました。お気遣いなく。
いつもながら、大変助かりました。
すばらしい情報をありがとうございます!
>showBOOさん
こんばんは。
コメント&トラックバックありがとうございました。
お役にたてたようで良かったです。
ではでは!
こんにちは。
改行変換処理をより使いやすくにするプラグインを作ってみました。
http://www.h-fj.com/blog/archives/2005/08/28-160725.php
テキストフィルターを追加する形になりますので、必要に応じてMT標準の改行変換処理と使い分けることができます。
yujiroさん、こんにちは。
いつもわかりやすい解説をしていただいてありがとうございます。
これで引用時やリスト時の悩みから解放されそうです。
どうもありがとうございました。
>みっくさん
こんにちは。
お役にたったようでよかったです。
ご連絡&トラックバックありがとうございました。
こんにちは。
こちらの記事の件で、質問をさせてください。
Movable Type 3.2を使って作成しているのですが、
エントリーの表示でどうしても空行を反映することが
出来ず苦しんでおります。
●改行設定: 改行を変換にする
としておりますが、うまく反映されません。
CSSのine-height:140%も反映されず
MTの問題というよりも私の間違えのような
気もするのですが。。。
突然で申し訳ございませんが、
よろしくお願いいたします。
>しゅんさん
はじめまして。
ご質問の件ですが、HTMLを拝見させて頂いたところ、マークアップは正しく、こちらでソースを拝借して line-height を変更してみたところ、正常に機能するようです。
推測ですが、以前のスタイルがキャッシュに残っているのではないでしょうか。
ということで、強制リロードを行うか、ブラウザの履歴のクリア・キャッシュのクリア・一時ファイルの削除等を行ってみてください。
ブラウザのキャッシュをクリアするも参考になれば幸いです。
以上です。
それではよろしくお願い致します。
ドコモからの投稿の際、途中で文章が途切れてしまう現象はこのパラグラフタグが関係してるんでしょうか。その場合、上記のように設定すれば、今後ドコモでメール投稿しても文章途切れ現象が回避されますか?
>pikaさん
こんにちは。
ご質問の件ですが、「携帯からの投稿で、投稿した本文が途中で途切れた形で公開される」という解釈でよろしいでしょうか。
パラグラフが付加されるのは投稿後の処理ですので、途切れる原因は、携帯からのフォーム送信ではひとつのテキストエリアから送信できるバイト数に制限があるからではないでしょうか。
質問の解釈が誤ってましたらお許しください。
それではよろしくお願い致します。
Util.pmの<br />を<br>にしたら、
終了タグのつもりなのか末尾の</p>直前に</br>が入るように……
MTをHTML形式で扱いたい人はほとんどここでつまずいているのではと思う。
>tonさん
こんにちは。
これは単なるボヤキと解釈しましたが、ご要望等ありましたら再度ご連絡ください。