45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

フォーマット「改行を変換する」でHTML4を出力する方法

コメント
0件
トラックバック
1件

5月2日、replaceモディファイアの欠点を追記する事を機に記事を全面的に書き直しました。

HTMLタグの要素名を大文字にしたい、空要素タグをHTML4式書き出したい方はどうぞ「regex_replaceモディファイアでタグの要素名を大文字化する方法」の方をご覧下さい。この記事よりも有用な方法をご用意してあります。

Movable Typeの改行を変換するフォーマットでHTML4仕様のサイトを構築しようとする場合、テンプレートを書き換えるだけでは限界があります。

改行を変換するフォーマットは、文章を段落ごとにpタグで括り、改行はbrタグに変換されます。

世界には魔王がいる。
それも50年前までの話。

現在、魔王は自然現象と化している。
<p>世界には魔王がいる。<br />
それも50年前までの話。</p>

<p>現在、魔王は自然現象と化し世界に溢れている。</p>

上の通り、タグは全て小文字で出力されますがHTML4で記述したい場合のタグは大文字で出力したいと思います、私だけかもしれませんが。
(そもそもHTML4の要素名が大文字でなければならない、という決まりはありません。好みの問題です)
これがMTHTML4仕様のページを出力する場合の障害になるのです。
(もっとも、HTML4仕様のページに小文字のタグが混ざっている事を問題にしなければ何の問題もありません。やはり好みの問題です)

その障害を打破する方法を紹介する前に、どうして改行を変換するフォーマットにこだわるのかを説明すると、それは改行を変換するがMTの標準機能だからです。
他のフォーマットを使うのであれば、初めからタグを大文字で出力するテキストフィルタープラグインを導入するなりプラグインを改造するなりした方が良いと思います。

MTで大文字のHTMLタグを出力する方法はいくつかあります。
しかし、そのどれも完璧ではないのでご使用にはくれぐれもご注意ください。

改行を変換するフォーマットの動作詳細については他サイトをご利用ください。
このフォーマットを取り上げているサイト・記事は少なくありません。

replaceモディファイアで置換する

この方法ではreplaceモディファイアを使って小文字のタグを大文字に置換します。

<$MTEntryBody replace="<br />","<BR>" replace="<p>","<P>" replace="</p>","</P>"$>

この方法の欠点は以下の二つです。

とは言え、MTの使い方によっては何ら問題ありません。

対象となるタグを全て指定しなければならない

基本、改行を変換するフォーマットによって加えられるのはbrタグとpタグの二種類、p終了タグを加えても三種類です。

しかしそれ以外にHTMLタグを使った場合はその指定も加えなければいけません。
つまり、対象となるタグが多くなればなるほど指定が必要になります。

例えばアイテムから画像を貼り付けたりファイルを挿入した場合はimgタグやaタグの指定も必要になります。
もっともこの二つに限っては記事中で大文字に変更しておく事が可能ですが。

記事中にHTMLタグを殆ど使わない・使っても少数、という方には問題にはなりません。

置換できない開始タグがある

例えばspanの開始タグなら下のように記述したいと思いますが、実際は動作しません。

<$MTEntryBody replace="<span","<SPAN"$>

これはspanタグが置換できないのではなく、開始タグにマッチングする記述方法ができないのです。
失敗する原因はグレーターザン(大なり)がない事なのですが、説明は省略します。

replace="span","SPAN"という書き方でなら置換する事もできますが、spanタグ以外も置換される恐れがあります。
記事中にHTMLタグの要素名と被る英単語を使わない、という方には問題にはなりません。

replace_regexモディファイアで置換する

この方法ではregex_replaceモディファイアを使って小文字のタグを大文字に置換します。

<$MTEntryBody regex_replace="/<br \/>/g","<BR>" regex_replace="/<(\/?)p>/g","<$1P>"$>

この方法の欠点はただ一つ、対象となるタグを全て指定しなければならない、という事だけです。

replaceモディファイアの方で取り上げた置換できない開始タグがある問題は、regex_replaceモディファイアなら解決できます。

<$MTEntryBody regex_replace="/<(\/?)span([^>]*)>/g","<$1SPAN$2>"$>

imgみたいな空要素タグの書き方を変更する事もできます。

<$MTEntryBody regex_replace="/<img([^>]+) \/>/g","<IMG$1>"$>

upper_caseモディファイアを使って大文字化する

この方法ではupper_caseモディファイアを使います。

<$MTEntryBody upper_case="1"$>

この方法の欠点は、全ての小文字が変換される、という事です。
upper_caseモディファイアはaからzまでの小文字を大文字に変換します。
一つ残らずです。
下がその変換前後の比較です。

変換前:<a href="http://www.example.com/" class="Sample">v(o_o)v</a> orz
変換後:<A HREF="HTTP://WWW.EXAMPLE.COM/" CLASS="SAMPLE">V(O_O)V</A> ORZ

href属性もURLも顔文字も、全て大文字になっています。
これが原因でサーバ、またはブラウザによっては深刻な問題が発生します。

しかし、記事中にHTMLタグどころか英字を使わないのであれば、たいした問題は起こりえないと思います。

PerlPHPを使って置換する

テンプレート上でPHPPerlのコードを使えるようにすれば、正規表現で際限なく的確に置換できます。

例えばPerlなら、PerlScriptというプラグインを使えばテンプレート内で使う事ができます。
PerlModuleというプラグインでも可能でしょう。

PHPが使える同様のプラグインがあるかはわかりません。
ダイナミック・パブリッシングを利用していればページ内でPHPコードが実行できます。

Movable Typeのソースコードを改造する

MTのソースコードを改造してHTML4を出力させる事もできます。

しかしこの方法はMTで管理する全てのブログに影響するためおすすめできません。

総括

MTHTML4を出力するには、使い方だけで実現するのは難しいようです。
やはりフォーマットなしを使って簡単に行った方が賢いのかもしれない。

そんな事はなく、フォーマットも選ばず、使い方だけで実現できました。

だがしかし、私はHTMLタグを大文字で出力するためのプラグインを自作する事にします。
目指せ、MTHTML4サイト構築!!

そんな必要はなかったのです。

コメント[0]

コメントはまだありません。

コメント投稿フォーム

コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。

コメント投稿フォーム

トラックバック[1]

regex_replaceモディファイアでタグの要素名を大文字化する方法 - 45式::雑記 (2009年5月11日04:17)
以前の記事でHTMLタグの要素名を大文字化する方法を紹介しましたが、それらはどれも不完全なものでした。しかし今度のは違います。regex_replaceモ...
カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは