3

PHP ヒアドキュメント内で JavaScript を終了できないのはなぜですか?

この行の下の残りのコード:

</script> 

PHP のコードの一部ではなくなります。それらは HTML コードになります。

これは、終了スクリプト コードが PHP ブロックを終了するようなものです。

$headerContent = <<<HEAD
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
    <head>
    <title>$title</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />

    <script>
    </script> // Here is the problem
    </head> // code here and below becomes not part of PHP.
    <body>
    .
    . 
    .
HEAD;

見やすくするためのスクリーンショット

この問題を解決するためのヒントはありますか?

4

1 に答える 1

3

これをHEREDOCで再現することはできませんが(この点で、PHPのバージョンが異なれば動作も異なる可能性があります)、はに対応するため、PHPコード</script>と同等です。例:?><script language="php">

<script language="php"> $a = 1; </script>
Test: <?= $a ?>

したがって、終了タグで問題が発生した場合は常に、?>終了タグでも同じ問題が発生します</script>。1つのオプションは、これを変数に格納して使用することです。例:

<?php

$endScript = '</' . 'script>';
$headerContent = <<<HEAD
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
    <head>
    <title>$title</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />

    <script>
    $endScript
    </head>
    <body>
    .
    . 
    .
HEAD;
于 2013-03-09T11:20:13.730 に答える