CDATAセクションを正しくエスケープする方法
<![CDATA[(ここ)]]>
(ここ)は確かにHTMLエスケープしなくてもいいんだけど、(ここ)に予期せぬ"]]>"が現れるとそこでCDATAセクションが終わってしまう。
だから(ここ)に"]]>"という字面が現れないようにしないといけないので、
全ての ]]> を ]]]]><![CDATA[> に置き換える。
分断の仕方によって他にも書き方があって、パターンは以下の通りになる。
]]]]><![CDATA[> ]] ]]> <![CDATA[ > ↑"]]" ↑CDATA終了 ↑CDATA開始 ↑">" ]]]>]<![CDATA[> ] ]]> ] <![CDATA[ > ↑"]" ↑CDATA終了 ↑"]" ↑CDATA開始 ↑">" ]]]><![CDATA[]> ] ]]> <![CDATA[ ]> ↑"]" ↑CDATA終了 ↑CDATA開始 ↑"]>" ]]>]]<![CDATA[> ]]> ]] <![CDATA[ > ↑CDATA終了 ↑"]]" ↑CDATA開始 ↑">" ]]>]<![CDATA[]> ]]> ] <![CDATA[ ]> ↑CDATA終了 ↑"]" ↑CDATA開始 ↑"]>"
どれが一番美しいだろうか?
私ならギリギリまで粘るという意味で、]] と > に分けるかな。
見た目のかっこ良さからいうと3番目かも。バランスは一番良いよね。
一応上記以外に以下のようなパターンがあるけど、
]]>]]><![CDATA[
">"が美しくないので、>は必ず次のCDATAセクションに入るようにしてる。
(意味的には「"]]>"をCDATAセクションに入れない」となって美しいんだけどね)