2013-01-23 60 views
6

Điều này làm tôi bận tâm trong một thời gian. Hãy nói rằng chúng tôi có một đơn giản PHP-File:PHP ăn linefeed trong chế độ hỗn hợp php/plaintext

Line 0 
Line 1 
<?="Line 2"?> 
Line 3 

Chế biến tập tin này sẽ cho kết quả:

Line 0 
Line 1 
Line 2Line 3 

đâu thức ăn đường sau khi ?> đi đâu? Linefeed không phải là beeing devoured khi đặt một số ký tự sau thẻ đóng (ví dụ: ?>.).

Có cách nào để kiểm soát hành vi này không? Tôi không sẵn sàng đặt khoảng trắng sau thẻ đóng, vì IDE của tôi được định cấu hình để xóa khoảng trắng trước dòng dữ liệu (và tôi thích nó theo cách đó).

+0

Thử '' –

+1

Không sử dụng chế độ HTML để tạo tệp văn bản; đó là yêu cầu cho sự cố :) –

+0

Thêm một linefeed bổ sung tất nhiên sẽ làm việc, nhưng tôi muốn PHP để phụ tùng đầu tiên của tôi. –

Trả lời

5

Có, thực sự:

Thẻ đóng cho khối này sẽ bao gồm dòng mới ngay lập tức nếu có.

http://php.net/manual/en/language.basic-syntax.instruction-separation.php

Ý nghĩa, nếu ?> là điều cuối cùng trên dòng, các dòng mới sẽ được gỡ bỏ như một phần của khối bế mạc PHP. Bạn cần rõ ràng echo một dòng mới hoặc thêm một dòng mới bổ sung.

+0

Hành vi này không có ý nghĩa với tôi. Tại sao mọi người lại muốn điều này?Nên có cách để tắt nó đi một ngày nào đó: -/ –

+1

@Felix Một số khối mã không tạo ra kết quả đầu ra, và bạn không nhất thiết muốn chúng xuất hiện trên khắp nơi; nói ''. Có, những gì PHP không phải là một giải pháp tuyệt vời. ERB cho Ruby và những người khác có * kiểm soát khoảng trắng *, ví dụ: '-%>' ('-' điều khiển đầu ra hoặc không đầu ra của các dòng mới/khoảng trắng sau). PHP nên thêm điều đó. – deceze

1

Bên ngoài các thẻ <?php?>, trình thông dịch PHP hoạt động ở chế độ HTML và khoảng cách bên trong chế độ HTML ít vấn đề hơn là đối với nội dung văn bản.

Để tạo văn bản với PHP bạn nên sử dụng dây đồng bằng và xây dựng đầu ra của bạn theo cách này:

$var = "Line 2"; 
$s = "Line 0\nLine 1\n$var\nLine3"; 

Ít nhất điều này sẽ không cung cấp cho bạn một khó chịu, mặc dù documented, ngạc nhiên :)

4

Điều này is actually a feature (tin hay không). PHP tiêu thụ một linefeed nếu nó trực tiếp theo sau một thẻ đóng PHP:

Thẻ đóng cho khối sẽ bao gồm dấu trừ ngay lập tức dòng mới nếu có.

Điều này được đặt rõ ràng sao cho tệp PHP kết thúc bằng dòng trống sẽ không gây ra dòng mới xuất hiện ở đầu ra khi include d từ tập lệnh khác. Vì vậy, nó thực sự là một "bảo vệ dốt nát" tính năng từ những ngày tuổi mà chúng ta phải sống với trong tương lai gần.

Nếu bạn thực sự muốn dòng mới có các tùy chọn khác: chỉ cần đặt hai dòng mới sau thẻ đóng (thứ hai sẽ hoạt động!) Để lặp lại dòng mới từ mã.

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