2012-11-05 31 views
189

Tôi đã chạy PHP mã sau:Trong PHP, tại sao</script> không hiển thị lỗi phân tích cú pháp?

<?php 
    </script> 
?> 

Không có lỗi phân tích cú pháp và đầu ra là "?>" (example).

Trong những trường hợp tương tự như tôi làm được một lỗi phân tích cú pháp:

<?php 
    </div> 
?> 

Parse error: syntax error, unexpected '<' in ...

Tại sao không <?php </script> ?> cung cấp cho các lỗi tương tự?

+0

Rất tò mò. Điều gì đã cố gắng đạt được hoặc bạn đang thử nghiệm điều gì? – asprin

+8

Trên thực tế trường hợp đã khác nhau đêm qua tôi đã bỏ thẻ đóng php. Và sau đó tôi đã có một thẻ và tôi đã dành hơn 30 phút để tìm ra lý do tại sao điều này không có bất kỳ lỗi nào nhưng đầu ra không phải là mong muốn. – Irfan

+6

Tôi không muốn sống trên hành tinh này nữa. – Kzqai

Trả lời

270

này phải là do there are various ways of starting a block of PHP code:

  • <? ... ?> (gọi là short_open_tag)

  • <?php ... ?> (tiêu chuẩn thực sự)

  • <script language="php"> ... </script> (không được khuyến khích)

  • <% ... %> (không được chấp nhận và loại bỏ thẻ kiểu ASP sau 5.3.0)

Rõ ràng, bạn có thể mở một khối PHP một cách và đóng một khối khác. Không biết điều đó.

Vì vậy, trong mã của bạn, bạn đã mở khối bằng cách sử dụng <? nhưng PHP nhận dạng </script> là gần hơn. Điều gì đã xảy ra là:

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

Lưu ý rằng không nên sử dụng '

36

Trong PHP, bạn có thể sử dụng thẻ script để mở khối PHP.

Vì vậy, bạn có thể sử dụng

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

Vì vậy, trong ví dụ của bạn, bạn đã trộn thẻ mở bình thường, <?php, với thẻ đóng, </script>. Vì vậy, trình phân tích cú pháp giả định rằng tất cả văn bản sau thẻ đóng kịch bản là bình thường HTML.

Đọc thêm trong Escaping from HTML.

Các vấn đề liên quan