MovableTypeのregex_replaceでシングルクォーテーションの置換えをするとエラーが出るとき

目次

MovableTypeでAMP対応のページを書き出すためのテンプレートができてもGoogle Search ConsoleAccelerated Mobile Pagesで致命的なエラーや警告が次々出てきてHTMLのソースを修正しなければならない部分がたくさん出てきました。

border="0"target="_blank"とかstyle="**"を使ったらダメとか...。

これらと一つ一つを正規表現で置換をするMT関数のregex_replaceを使って不要な要素を削除することにしました。

ただ、自分は正規表現が苦手でなかなか思った通りの置換や不要な文字列の削除ができませんでした。しかし、なんとか解決できたので参考になった正規表現のサンプルのページやソースをメモ。

正規表現による置換の参考

上記のページはWordPress向けにPHPで書かれておりますが、わかりやすかったです。

シングルクォーテーションでエラー

ここまではよかったのですが、シングルクォーテーション(')でつまずきました。

例えば、borderを消そうとしたとき、border="0"border='0'のように0をダブルクォーテーションで囲ってある場合と、シングルクォーテーションで囲ってある場合があります。正規表現の検索対象にシングルクォーテーション(')が含まれていると、DreamWeaverや正規表現の使えるテキストエディタではちゃんと置換ができるのに、全く同じ正規表現をMovableTypeのテンプレートに使うとエラーが出てうまくいきませんでした。ダブルクォーテーション(")だけだと問題なく置換できました。

エラーが出たソース

<$mt:Var name='regex_0' value='/( border| target| style| onclick)=["'](.*?)["']/g'$>
<$mt:Var name='regex_1' value=''$>
<MTUnless regex_replace="$regex_0","$regex_1">
<mt:EntryBody>
<mt:EntryMore>
</MTUnless>

["']のように<$mt:Var>valueの値にシングルクォーテーション(')を含まれているとエラーが出ます。シングルクォーテーション(')に¥マークを付けて¥'とエスケープしてもダメでした。

原因は変数の使い方

原因はMTのテンプレート内で使う変数をセットする書き方(<$mt:Var~$>)が悪かったようで、以下のページ内にもあるように<MTSetVarBlock>~</MTSetVarBlock>を使って変数に正規表現の検索対象を入れて使うと解決できました。

ダブルクォーテーション(")は特に問題ないのですが、シングルクォーテーション(')は注意が必要です。

うまくいったソース

<MTSetVarBlock name="regex_0">/( border| target| style| onclick)=["'](.*?)["']/g</MTSetVarBlock>
<MTSetVarBlock name="regex_1"></MTSetVarBlock>
<MTUnless regex_replace="$regex_0","$regex_1">
<mt:EntryBody>
<mt:EntryMore>
</MTUnless>

これで、border="**"、target="**"、style='**'、 onclick='**'など、ダブルクォーテーションとシングルクォーテーションのどちらで囲ってあっても全部削除できます。

その他参考ページ

前へ

MovableTypeでAMPページ用にiframeをamp-iframeに置き換えて書き出す

次へ

Windows Updateを自動で再起動とアップデートを繰り返すバッチファイルを作る