Чому в PHP чому </script> не показує помилку розбору?


193

У мене був такий PHP- код:

<?php 
    </script>
?>

Помилок розбору не було, і вихід " ?>" ( приклад ).

У подібних випадках я отримую помилку розбору:

<?php 
    </div>
?>

Помилка розбору: помилка синтаксису, несподівана '<' у ...

Чому не <?php </script> ?>дає однакової помилки?


Просто цікаво. Чого ви намагалися досягти чи чого саме експериментували?
asprin

8
Насправді справа була іншою вчора ввечері, я пропустив тег закриття php. І після цього у мене був тег </script>, і я витратив більше 30 хв, щоб з'ясувати, чому це не має жодної помилки, але все одно вихід не такий, як бажання .
Ірфан

7
Я більше не хочу жити на цій планеті.
Kzqai

2
PHP це робить для людей.
xiankai

Відповіді:


273

Це повинно бути, тому що існують різні способи запуску блоку коду 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

31
Зауважте, що використовувати <script language="php">не рекомендується.
Іван Дворак

4
Швидке зауваження, тому що я пам’ятав, що в short_open_tagдирективі відбулися деякі зміни У PHP 5.4 <?=коротке <?php echoвже не потрібно short_open_tag. Перехід між системами, де <?=були доступні та недоступні, мене завжди засмучував. php.net/manual/en/ini.core.php#ini.short-open-tag
Кріс

1
@thatmiddleway Зауважте, що офіційний документ також рекомендує <?php ... ?>: php.net/manual/en/language.basic-syntax.phpmode.php
Джон Дворак

37

У PHP ви можете використовувати scriptтег, щоб відкрити блок PHP.

Тож можна використовувати

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

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

Детальніше читайте в розділі " Побіг від HTML" .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.