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


193

Tôi đã chạy mã PHP sau :

<?php 
    </script>
?>

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

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

<?php 
    </div>
?>

Lỗi phân tích cú pháp: lỗi cú pháp, không mong muốn '<' trong ...

Tại sao không <?php </script> ?>đưa ra cùng một lỗi?


Chỉ tò mò thôi. Những gì đã cố gắng để đạt được hoặc những gì bạn đã thử nghiệm trên?
asprin

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

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

2
PHP làm điều đó với mọi người.
xiankai

Câu trả lời:


273

Điều này phải là do có nhiều cách khác nhau để bắt đầu một khối mã PHP :

  • <? ... ?>(được 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 dùng nữa và đã xóa 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 nó theo cách 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 ra </script>là gần hơn. Chuyện gì đã xảy ra:

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

31
Lưu ý rằng việc sử dụng <script language="php">không được khuyến khích.
John Dvorak

4
Ghi chú nhanh, vì tôi nhớ có một số thay đổi với short_open_tagchỉ thị. Trong PHP 5.4 <?=ngắn <?php echokhông còn yêu cầu short_open_tag. Đi giữa các hệ thống <?=có sẵn và không có sẵn luôn làm tôi thất vọng. php.net/manual/en/ini.core.php#ini.short-open-tag
Chris

1
@thatmiddleway Lưu ý rằng tài liệu chính thức <?php ... ?>cũng đề xuất : php.net/manual/en/lingu.basic-syntax.phpmode.php
John Dvorak

37

Trong PHP, bạn có thể sử dụng scriptthẻ để mở một 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ẻ script đóng là bình thường HTML.

Đọc thêm trong Thoát khỏi HTML .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.