Movable Type の記事中の&を&に変更する方法

Movable Type の記事中の&を&に変更する方法

Posted at July 27,2009 1:30 AM
Tag:[MovableType, regex_replace, TemplateTag]

Movable Type を使ってアンカーやアフィリエイトリンクなどを付けたブログ記事を書いたときに、リンクに含まれる&を&に自動的に変換する方法を紹介します。

1.基本

(X)HTML では、テキストやURLに含まれる & は & と、実体参照で記述する必要があります。

例1:テキスト

【誤】
ドラッグ&ドロップ

【正】
ドラッグ&ドロップ

例2:URL(Google の「Movable Type」の検索結果のリンク)

【誤】
<a href="http://www.google.co.jp/search?hl=ja&q=movable+type&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=">「Movable Type」の検索結果</a>

【正】
<a href="http://www.google.co.jp/search?hl=ja&amp;q=movable+type&amp;btnG=Google+%E6%A4%9C%E7%B4%A2&amp;lr=&amp;aq=f&amp;oq=">「Movable Type」の検索結果</a>

2.Movable Type のブログ記事内にある & を &amp; に変換する

各テンプレートにある MTEntryBody タグに、次の regex_replace タグ(青色部分)を追加すれば、ブログ記事内にある & をすべて &amp; に自動変換して、ページを出力します。

<$mt:EntryBody regex_replace="/&/g","&amp;"$>

次のようにしておけば、元からある &amp; は変換対象になりません。

<$mt:EntryBody regex_replace="/&(?!amp;)/g","&amp;"$>

ただし、他の実体参照(&lt;など)がブログ記事に含まれている場合もすべて変換対象になってしまうので、プライベートタグを使って記事ごとに振り分けるのも手かもしれません(というか、もっとエレガントな正規表現があるかもしれません)。

<mt:EntryIfTagged tag="@ref">
  <$mt:EntryBody regex_replace="/&/g","&amp;"$>
<mt:Else>
  <$mt:EntryBody$>
</mt:If>

実体参照したいブログ記事のタグに「@ref」を付与しておきます。

また、自動ではありませんが、下記のプラグインで実体参照化する方法もあります。

エムロジック放課後プロジェクト - EntryRefButton アーカイブ

3.参考サイト

以下です。ありがとうございました。

Wikibooks - Perl/正規表現
関連記事
トラックバックURL


コメント

こんにちは。
エントリの中でしたらMT4だとリッチテキストエディタを一度開けばXHTMLでないコードを実態参照に変換してくれると思うのですが、不完全なところがあったりしたのでしょうか?

[1] Posted by ヲレ : August 3, 2009 12:19 PM

>ヲレさん
こんにちは。
情報ありがとうございました。
リッチテキストの動作確認はあまり行っていなかったので、全く存じませんでした(普段も使用していません)。
頂いた情報については、ブログでも別途エントリーしたいと思います。
それではよろしくお願い致します。

[2] Posted by yujiro logo : August 4, 2009 1:58 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)