PHPで</ script>が解析エラーを表示しないのはなぜですか?


193

次のPHPコードを実行していました。

<?php 
    </script>
?>

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

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

<?php 
    </div>
?>

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

<?php </script> ?>同じエラーが発生しないのはなぜですか?


ちょっと興味があるんだけど。何を達成しようとしていたのか、または何を実験していたのですか?
asprin

8
実際、昨夜は状況が異なり、phpの終了タグがありませんでした。その後、</ script>タグがあり、30分以上かけてエラーが発生しない理由を突き止めましたが、それでも出力が望んでいません。 。
Irfan

7
もうこの惑星に住みたいとは思わない。
Kzqai 2013年

2
PHPはそれを人に行います。
xiankai 2013

回答:


273

これは、PHPコードのブロックを開始するさまざまな方法があるためです

  • <? ... ?>(として知られている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

31
の使用<script language="php">は推奨されないことに注意してください。
John Dvorak

4
簡単なメモ、short_open_tagディレクティブに変更があったことを思い出しました。PHP 5.4 では、はを必要と<?=<?php echoなくなりましたshort_open_tag<?=利用できるシステムと利用できないシステムの間を行き来することは、いつも私を苛立たせました。php.net/manual/en/ini.core.php#ini.short-open-tag
Chris

1
@thatmiddleway公式ドキュメントでも推奨さ<?php ... ?>れていることに注意してください:php.net/manual/en/language.basic-syntax.phpmode.php
John Dvorak

37

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

だからあなたは使うことができます

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

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

詳しくは、HTMLからのエスケープをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.