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番目かも。バランスは一番良いよね。

vimのsyntax highlightが美しくて分かりやすかったのでスクショ撮ってみた。

一応上記以外に以下のようなパターンがあるけど、

]]>]]&gt;<![CDATA[

"&gt;"が美しくないので、>は必ず次のCDATAセクションに入るようにしてる。
(意味的には「"]]>"をCDATAセクションに入れない」となって美しいんだけどね)