Tôi vừa thử nghiệm một vài trình duyệt sử dụng đoạn mã JavaScript ngớ ngẩn này:
function log_newline(msg, test_value) {
if (!test_value) {
test_value = document.getElementById('test').value;
}
console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
+ ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}
log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">
</textarea>
IE8 và Opera 9 trên Windows sử dụng \r\n
. Tất cả các trình duyệt khác mà tôi đã thử nghiệm (Safari 4 và Firefox 3.5 trên Windows và Firefox 3.0 trên Linux) đều sử dụng \n
. Tất cả đều có thể xử lý \n
tốt khi đặt giá trị, mặc dù IE và Opera sẽ chuyển đổi lại thành \r\n
nội bộ. Có một bài viết SitePoint với một số chi tiết khác được gọi là kết thúc dòng trong Javascript .
Cũng lưu ý rằng điều này độc lập với các kết thúc dòng thực tế trong chính tệp HTML (cả hai \n
và \r\n
cho cùng một kết quả).
Khi gửi biểu mẫu, tất cả các trình duyệt sẽ hợp thức hóa các dòng mới %0D%0A
trong mã hóa URL. Để thấy điều đó, tải ví dụ data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>
và nhấn nút gửi. (Một số trình duyệt chặn tải của trang đã gửi, nhưng bạn có thể thấy các giá trị biểu mẫu được mã hóa URL trong bảng điều khiển.)
Tuy nhiên, tôi không nghĩ rằng bạn thực sự cần phải thực hiện bất kỳ quyết định nào. Nếu bạn chỉ muốn phân chia văn bản trên dòng mới, bạn có thể làm một cái gì đó như thế này:
lines = foo.value.split(/\r\n|\r|\n/g);