以下のXHTML1.0トランジショナルで考える。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題ドキュメント</title> <script type="text/javascript"> //<![CDATA[ alert('</script>'); //]]> </script> </head> <body> </body> </html>
以下のalert内の閉じタグが、jsの閉じタグとして認識されてしまい、残念ながら正しく実行されない。
alert('</script>');
■解決策
以下のようにエスケープする。
alert('<\/script>');
もしくは以下のように文字列を結合する。
alert('</' + 'script>');
また、Chrome、Firefox、OperaでXMLパーサーが正しくCDATAセクションを認識するように、ファイルの拡張子をxhtmlにすることも有効な解決策ではあるが、この手法ではIEが正しく認識できない。