MTが構築するHTMLソースの空白と改行を削除する

Movable Typeが構築するHTMLソースには、余計な空白や改行が多く、正直きたないですよね。なので、これらをごっそり削除する方法を紹介します。

プラグインは使用せず、この頃お世話になりっぱなしのグローバル・モディファイア「regex_replace」を使用します。

やり方はシンプル。空白や改行を削除したい内容を下記のようにするだけです。

<MTSetVarBlock name="source">
 
<!--空白や改行を削除したい内容-->
 
</MTSetVarBlock><MTGetVar name="source" regex_replace="/\s{2,}/g","\n">

まず、グローバル・モディファイア全てに言えることですが、グローバル・モディファイアは何らかの値が出力されるときに実行されます。

なので、空白や改行を削除したい内容を一旦MTSetVarBlockで変数化します。ここでは変数名をsourceとしています。

次にすぐさまsourceをMTGetVarで出力します。このときにregex_replaceを実行させます。

regex_replaceで何をしているかというと、半角スペース・タブインデント・改行などの空白部分(\s)が2つ以上連続しているとき({2,})、その部分を改行(\n)に置き換えるってことをしています。

注意点は2つ程。

  • HTMLタグの属性(アトリビュート)などは半角スペース1つで空けること。コーディングミスで半角スペースが2つ以上あると、それも削除されちゃいます。
  • MTEntryBody, MTEntryMore, MTPageBody, MTPageMoreが削除したい内容に含まれる場合はpre要素の扱い方に注意。pre要素内のインデントももれなく削除されちゃいます。半角スペースによるインデントは&nbsp;に置き換えてやればOKです。

これらに気をつければ、気持ち悪いHTMLソースとおさらばできます。

ちなみに、モジュールやウィジェットをインクルードさせるときにも応用できますよ。

<MTInclude module="○○" regex_replace="/\s{2,}/g","\n">
<MTInclude widget="○○" regex_replace="/\s{2,}/g","\n">

追記(2012-02-28): 現在は下記のソースを使っています。

<MTFor regex_replace="/\s{2,}/g","\n">
  
  <!--空白や改行を削除したい内容-->
  
</MTFor>