印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType encode_xml 属性の扱いの難しさ

Movable Type のテンプレートで encode_xml 属性は万能ではなかった。コメントやトラックバックなど,外部からやって来るものに対してだけ使うのがよさそうだ。

■ ■ ■

encode_xml は Movable Type タグのグローバルアトリビュートで,「'」を「&apos;」というように文字参照に変換してくれる属性である。先日,自分の書いた記事が原因で再構築に失敗したため,<$MTEntryTitle$> タグに encode_xml 属性を追加して,この問題を回避した(nlog(n): 突然の再構築失敗は去年の記事が原因)。しかし,この解決方法には弊害があった。

環境は Movable Type 2.661。恐らく MT 3.x でも同じ。

<$MTEntryTitle encode_xml="1"$> とすることで,「X'mas」が「X&apos;mas」に変換されたので万々歳だと思っていたが,別の問題が発生してしまった。タイトルに「&amp;」という文字列を含んでいる場合である。昨年の記事「HDD&DVD レコーダが謎のエラーで停止」のタイトル表示に <$MTEntryTitle encode_xml="1"$> を使ったところ,「<![CDATA[HDD&amp;DVD レコーダが謎のエラーで停止]]>」に変換されてしまった。その結果,「<」と「>」で囲まれているため,ブラウザには表示されなくなってしまった。

結論としては,自分で書く記事のタイトルには「'」を使って encode_xml 属性で自動変換するのではなく,手で「&apos;」と入力しておくことである。外部から送られるコメントやトラックバックは危険なことがあるので encode_xml をつけるのが安全。方針は次のようにすることにした。

  • 自分で書く記事は文字参照 (文字実体参照) を使い,encode_xml による変換は行わない
  • 外部から来るコメントやトラックバックには,安全のため encode_xml をつける

しかし,逆にコメントやトラックバックに encode_xml を使うと,&amp; というコードが含まれていたときに <![CDATA[ ... ]]> で囲まれてしまうのが難点である。

Posted by n at 2006-01-28 12:51 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?