ใน PHP เหตุใด </script> จึงไม่แสดงข้อผิดพลาดในการแยกวิเคราะห์


193

ฉันใช้งานโค้ดPHPต่อไปนี้:

<?php 
    </script>
?>

ไม่มีข้อผิดพลาดในการแยกวิเคราะห์และผลลัพธ์คือ " ?>" ( ตัวอย่าง )

ในกรณีที่คล้ายกันฉันจะได้รับข้อผิดพลาดในการแยกวิเคราะห์:

<?php 
    </div>
?>

ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์, '<' ใน ...

เหตุใดจึงไม่<?php </script> ?>ให้ข้อผิดพลาดเดียวกัน


แค่สงสัย. คุณพยายามทำอะไรให้สำเร็จหรือคุณกำลังทดลองทำอะไรอยู่
asprin

8
ที่จริงกรณีต่างกันเมื่อคืนฉันพลาดแท็กปิด php และหลังจากนี้ฉันมีแท็ก </script> และฉันใช้เวลามากกว่า 30 นาทีเพื่อหาสาเหตุว่าทำไมจึงไม่มีข้อผิดพลาด แต่ยังคงเอาต์พุตไม่เป็นที่ต้องการ .
Irfan

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">ไม่แนะนำให้ใช้
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>ดังนั้น parser HTMLสันนิษฐานว่าทุกข้อความหลังแท็กสคริปต์ปิดเป็นปกติ

อ่านเพิ่มเติมในการหลีกหนีจาก HTML

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.