Di PHP, mengapa </script> tidak menampilkan kesalahan parse?

193

Saya menjalankan kode PHP berikut :

<?php 
    </script>
?>

Tidak ada kesalahan parse dan hasilnya " ?>" ( contoh ).

Dalam kasus serupa, saya mendapatkan kesalahan parse:

<?php 
    </div>
?>

Kesalahan parse: kesalahan sintaks, '<' di ...

Mengapa tidak <?php </script> ?>memberikan kesalahan yang sama?

Irfan
sumber
Hanya penasaran. Apa yang ingin Anda capai atau apa yang sedang Anda coba?
asprin
8
Sebenarnya kasusnya berbeda tadi malam saya melewatkan tag penutup php. Dan setelah ini saya memiliki tag </script> dan saya menghabiskan lebih dari 30 menit untuk mencari tahu mengapa ini tidak memiliki kesalahan tetapi masih output tidak sesuai keinginan .
Irfan
7
Saya tidak ingin hidup di planet ini lagi.
Kzqai
2
PHP melakukan itu kepada orang-orang.
xiankai

Jawaban:

273

Ini pasti karena ada berbagai cara memulai blok kode PHP :

  • <? ... ?>(dikenal sebagai short_open_tag)

  • <?php ... ?> (standar banget)

  • <script language="php"> ... </script> (tidak direkomendasikan)

  • <% ... %> (tag gaya ASP yang ditinggalkan dan dihapus setelah 5.3.0)

Tampaknya, Anda dapat membuka blok PHP satu arah, dan menutupnya dengan cara lain. Tidak tahu itu.

Jadi dalam kode Anda, Anda membuka blok menggunakan <?tetapi PHP mengakui </script>sebagai yang paling dekat. Apa yang terjadi adalah:

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML
Pekka
sumber
31
Perhatikan bahwa menggunakan <script language="php">tidak dianjurkan.
John Dvorak
4
Catatan cepat, karena saya ingat ada beberapa perubahan dengan short_open_tagarahan. Dalam PHP 5.4 <?=singkat untuk <?php echotidak lagi memerlukan short_open_tag. Pergi antar sistem di mana <?=tersedia dan tidak tersedia selalu membuat saya frustrasi. php.net/manual/en/ini.core.php#ini.short-open-tag
Chris
1
@thatmiddleway Perhatikan bahwa dokumen resmi juga merekomendasikan <?php ... ?>: php.net/manual/en/language.basic-syntax.phpmode.php
John Dvorak
37

Di PHP, Anda dapat menggunakan scripttag untuk membuka blok PHP.

Jadi bisa digunakan

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

Jadi, dalam contoh Anda, Anda telah mencampur tag terbuka normal <?php,, dengan tag penutup </script>,. Jadi parser mengasumsikan bahwa semua teks setelah tag skrip penutup adalah normal HTML.

Baca lebih lanjut di Lolos dari HTML .

amd
sumber