web-dev-qa-db-ja.com

PHPで、</ script>に解析エラーが表示されないのはなぜですか?

私は以下を実行していました [〜#〜] php [〜#〜] コード:

<?php 
    </script>
?>

解析エラーはなく、出力は "?> "( )。

同様の場合、解析エラーが発生します。

<?php 
    </div>
?>

解析エラー:構文エラー、予期しない「<」...

なぜ<?php </script> ?>同じエラーを出しますか?

192
Irfan

これは、 PHP code のブロックを開始するさまざまな方法があるからです。

  • <? ... ?>short_open_tagとして知られています)

  • <?php ... ?>(実際の標準)

  • <script language="php"> ... </script>(非推奨)

  • <% ... %>(5.3.0以降、廃止予定および削除されたASPスタイルのタグ)

どうやら、PHPブロックを片方で開き、もう片方を閉じることができます。それを知りませんでした。

したがって、コードでは、<?を使用してブロックを開きましたが、PHPは</script>をより近いものとして認識します。

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML
273
Pekka 웃

PHPでは、scriptタグを使用してPHP=ブロックを開くことができます。

使用できます

<script language="php">
    echo 'hello world';
</script>

したがって、あなたの例では、通常の開始タグ<?php、終了タグ付き、</script>。したがって、パーサーは、終了スクリプトタグの後のすべてのテキストが通常のHTMLであると想定します。

詳細については、HTMLからのエスケープを参照してください。

37
amd