Movable Type のテンプレートで encode_xml 属性は万能ではなかった。コメントやトラックバックなど,外部からやって来るものに対してだけ使うのがよさそうだ。
encode_xml は Movable Type タグのグローバルアトリビュートで,「'」を「'」というように文字参照に変換してくれる属性である。先日,自分の書いた記事が原因で再構築に失敗したため,<$MTEntryTitle$> タグに encode_xml 属性を追加して,この問題を回避した(nlog(n): 突然の再構築失敗は去年の記事が原因)。しかし,この解決方法には弊害があった。
環境は Movable Type 2.661。恐らく MT 3.x でも同じ。
<$MTEntryTitle encode_xml="1"$> とすることで,「X'mas」が「X'mas」に変換されたので万々歳だと思っていたが,別の問題が発生してしまった。タイトルに「&」という文字列を含んでいる場合である。昨年の記事「HDD&DVD レコーダが謎のエラーで停止」のタイトル表示に <$MTEntryTitle encode_xml="1"$> を使ったところ,「<![CDATA[HDD&DVD レコーダが謎のエラーで停止]]>」に変換されてしまった。その結果,「<」と「>」で囲まれているため,ブラウザには表示されなくなってしまった。
結論としては,自分で書く記事のタイトルには「'」を使って encode_xml 属性で自動変換するのではなく,手で「'」と入力しておくことである。外部から送られるコメントやトラックバックは危険なことがあるので encode_xml をつけるのが安全。方針は次のようにすることにした。
しかし,逆にコメントやトラックバックに encode_xml を使うと,& というコードが含まれていたときに <![CDATA[ ... ]]> で囲まれてしまうのが難点である。
Posted by n at 2006-01-28 12:51 | Edit | Comments (0) | Trackback(0)
Master Archive Index
Total Entry Count: 1957