В PHP, почему </ script> не показывает ошибку синтаксического анализа?

Я использовал следующий код PHP :

<?php </script> ?> 

Ошибок разбора не было, и результат был « ?> » ( Пример ).

В подобных случаях я получаю ошибку синтаксического анализа:

 <?php </div> ?> 

Ошибка анализа: синтаксическая ошибка, неожиданная «<» в …

Почему <?php </script> ?> дает такую ​​же ошибку?

Это должно быть потому, что существуют различные способы запуска блока кода PHP :

  • <? ... ?> <? ... ?> (известный как short_open_tag )

  • <?php ... ?> (стандарт действительно)

  • <script language="php"> ... </script> (не рекомендуется)

  • <% ... %> (устаревший и удаленный тег ASP-стиля после 5.3.0)

По-видимому, вы можете открыть блок PHP одним способом и закрыть его другим. Не знал этого.

Итак, в вашем коде вы открыли блок, используя <? но PHP распознает </script> как ближе. Случилось так:

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

В PHP вы можете использовать тег script чтобы открыть блок PHP.

Таким образом, вы можете использовать

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

Итак, в вашем примере вы смешали обычный открытый тег <?php с закрывающим тегом </script> . Поэтому парсер предполагает, что весь текст после тега закрывающего скрипта является обычным HTML .

Подробнее читайте в разделе Escaping from HTML .