MovableTypeの regex_replace を使って色々と置換する方法

MovableTypeの regex_replace を使って色々と置換する方法の画像

MTのグローバル・モディファイアregex_replaceを使って置換処理をします。

使い方は簡単。
例えば、mt:Entrybodyタグ(本文)に書かれている内容で、「痴漢」という文字を「置換」に置換したい場合。。。もう意味わかんねえ。その場合は以下のように記述します。

<$mt:EntryBody regex_replace="/痴漢/","置換"$>

「痴漢」が一文字だけなら別にこれでもいいですが、「痴漢」が複数いたら全部「置換」に変えてやった方がいい場合は次のように記述します。

<$mt:EntryBody regex_replace="/痴漢/g","置換"$>

/痴漢/の後に、g と記述することで、繰り返し処理になります。

そして、グローバル・モディファイア regex_replace は正規表現を扱うことができるので以下のようなことが色々できるよ。

■空白行を詰める

MTタグに付ける。例えば、本文の空白行を削除するにはこんな感じ。

<$mt:EntryBody regex_replace="/\s*\n+/g","\n"$>

mt:SetVarBlock で囲んだ部分の空白行をつめる。

<mt:SetVarBlock name="shorten">
~ここの空白行をなくしたい~
</mt:SetVarBlock>
<mt:GetVar name="shorten" regex_replace="/\s*\n+/g","\n">

インクルードモジュールにも使える。

<MTInclude module="モジュール名" regex_replace="/\s*\n+/g","\n">

■出力されるURLを絶対パスからルートパスに変更する。

たぶん、regex_replace でよく使われるのがコレ。相対パスに変更するのはたぶん無理。ルートパスでもいいでしょ別に。
例えば、mt:EntryPermalinkで出力されるURL(http://www.example.co.jp/example/index.html)を、ルートパスURL(/example/index.html)で出力させたい時は以下のような感じ。

<mt:EntryPermalink regex_replace="(http|https)://.+?/","/">

■改行させたくない、一行で表示したい場合

以前にも紹介したけど、mt:EntryBodyなどで稀に改行させずに一行で表示させたくなってくるときがある。
そういうときには以下の書き方。
MTタグの値に含まれるすべての HTML タグを除去するグローバル・モディファイア remove_html を併用する。

<mt:entryBody remove_html="1" regex_replace="/\n|\t| | /g","">

■セキュリティ的に、ダブルクォーテーションをエスケープしたい場合

たとえば、MTタグで出力される内容をphpとか別のものに投げるとします。
その時に、投げる中身にダブルクォーテーションとかシングルクォーテーションとか入っていれば、色々不味いことがあります。SQLインジェクションとかXSSとかね。
そういったものを防ぐ意味で、こういうエスケープ処理をしておくというのは大事。以下のサイトが参考になりました。
参考:regex_replaceを安全簡潔に書く小技

<mt:setVarBlock name="regex0">/["']/g</mt:setVarBlock>
<mt:setVarBlock name="regex1">*</mt:setVarBlock>
<$mt:entryTitle regex_replace="$regex0","$regex1"$>