Vấn đề chính bạn gặp phải với tất cả các biến thể bạn đã thử là cả \n
và \r
là các ký tự thoát được chỉ được thoát khi bạn sử dụng chúng trong một chuỗi dấu ngoặc kép .
Trong PHP, có sự khác biệt lớn giữa '\r\n'
và "\r\n"
. Lưu ý dấu ngoặc đơn ở phần đầu tiên và dấu ngoặc kép ở phần thứ hai.
Vì vậy:'\r\n'
sẽ dẫn đến một chuỗi bốn ký tự chứa một dấu gạch chéo, một 'r', một dấu gạch chéo khác và một 'n', trong khi "\r\n"
sẽ chứa hai ký tự, đó là dòng mới và ký tự xuống dòng.
Vì vậy, câu trả lời trực tiếp cho câu hỏi của bạn là bạn cần sử dụng ví dụ thứ hai trong số các ví dụ bạn đã đưa ra trong câu hỏi, nhưng với dấu ngoặc kép thay vì dấu ngoặc kép:
$text = str_replace("\r\n",'', $text);
Cần chỉ ra rằng điều này sẽ xóa tất cả các dòng mới từ đầu vào và thay thế chúng bằng không. Nếu có nhiều hơn một dòng mới trong đầu vào, tất cả chúng sẽ bị xóa. Nếu không biết thêm về ứng dụng của bạn, tôi không biết liệu đây có phải là những gì bạn muốn hay không, nhưng đây là một số suy nghĩ:
-
Nếu bạn chỉ muốn xóa các dòng trống (và khoảng trắng khác) khỏi end của chuỗi đầu vào, bạn có thể sử dụng
trim()
chức năng thay thế. -
Nếu bạn muốn giữ lại định dạng để xuất ra HTML, thì
nl2br()
chức năng sẽ giúp bạn. Nếu bạn muốn xuất ra HTML mà không có định dạng thì bạn có thể không cần xóa chúng, vì trình duyệt sẽ không hiển thị ngắt dòng từ \ n ký tự. -
Nếu bạn thay thế các dòng mới mà không có gì, theo ví dụ của bạn, từ cuối cùng của dòng đầu tiên bây giờ sẽ chạy trực tiếp vào từ đầu tiên của dòng thứ hai, v.v. Bạn có thể thích thay thế chúng bằng một ký tự khoảng trắng hơn là không có gì.
-
Có thể người dùng chỉ có thể gửi thông tin đầu vào bằng
\n
không có\r
phù hợp hoặc ngược lại (điều này có thể do hệ điều hành hoặc trình duyệt của họ, hoặc do cố ý hack, hoặc một số lý do khác). Nếu bạn muốn thay thế tất cả các trường hợp của cả hai ký tự này, một cách đáng tin cậy hơn để làm điều đó là thay thế chúng riêng lẻ, thay vì dựa vào chúng ở cạnh nhau.str_replace()
cho phép bạn làm điều này bằng cách chỉ định chúng trong một mảng. Bạn cũng có thể sử dụngstrtr()
hoặcpreg_replace()
để đạt được cùng một mục tiêu.
Hy vọng điều đó sẽ hữu ích.