guimihanui

encode_xml="1"でCDATA区間の終了子が壊れる

0

この問題は、Movable Type 5.12で確認しました。

例えば、ブログ記事の本文が次の内容であるとします。

<script type="text/javascript">//<![CDATA[
document.write('<p>The quick brown fox jumps over the lazy dog.</p>');
//]]></script>

これを<$MTEntryBody encode_xml="1"$>で書き出すと、次のようになります。

<![CDATA[<script type="text/javascript">//<![CDATA[
document.write('<p>The quick brown fox jumps over the lazy dog.</p>');
//]]&gt;</script>]]>

CDATA区間の終了子である「]]>」が「]]&gt;」になってしまいます。
それがCDATA区間に入るので、データとしては

<script type="text/javascript">//<![CDATA[
document.write('<p>The quick brown fox jumps over the lazy dog.</p>');
//]]&gt;</script>

ということになります。つまり、CDATA区間が閉じなくなります。
これはまずいです。


開発者の方へ

encode_xml="1"で書き出す内容にCDATA区間があるときは、CDATA区間に入れようとせず、
特殊文字をエスケープして書き出すようにすべきです。


ユーザの方へ

ユーザ側の対策として、この不具合が修正されるまでは、mt-configに

NoCDATA 1

と書くべきです。
そうすれば、encode_xml="1"を使ったときに、CDATA区間が終了子を壊されてCDATA区間に入れられることはなくなります。

# セミナーで不具合報告はMTQで受け付けると聞きましたが、「MT5 不具合報告」のようなカテゴリがないので、止むを得ず「その他」にしました。

返信(2)

| 返信する
  • encode_xml="1"で書き出す内容にCDATA区間があるときは、CDATA区間に入れようとせず、 特殊文字をエスケープして書き出すようにすべきです。

    を訂正します。

    encode_xml="1"で書き出す内容に「]]>」があるときは、CDATA区間に入れようとせず、
    特殊文字をエスケープして書き出すようにすべきです。

  • フィードバックありがとうございます。
    バグデータベースに登録の上、将来のバージョンでの修正を検討いたします。
    https://movabletype.fogbugz.com/default.asp?106452

    ありがとうございました。

返信する