В PHP, почему не отображается ошибка синтаксического анализа?


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

<?php 
    </script>
?>

Ошибок синтаксического анализа не было, и вывод был "?>" ( пример).

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

<?php 
    </div>
?>

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный ввод '<'...

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

Author: Peter Mortensen, 2012-11-05

2 answers

Это должно быть потому, что существуют различные способы запуска блока 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
 272
Author: Pekka 웃, 2012-11-21 17:02:45

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

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

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

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

Подробнее читайте в Выход из HTML.

 37
Author: amd, 2012-11-06 19:39:37