2010-10-10 31 views
8

Nếu tôi có chuỗi UTF-8 và muốn thay thế ngắt dòng bằng HTML <br>, điều này có an toàn không?Thay thế ngắt dòng UTF-8 có an toàn không?

$var = str_replace("\r\n", "<br>", $var); 

Tôi biết str_replace không phải là UTF-8 an toàn nhưng có thể tôi có thể thoát khỏi điều này. Tôi hỏi vì không có hàm mb_strreplace.

Trả lời

16

UTF-8 được thiết kế sao cho các chuỗi đa byte không bao giờ chứa bất kỳ thứ gì trông giống như ký tự ASCII. Đó là, bất cứ khi nào bạn gặp một byte có giá trị trong khoảng 0-127, bạn có thể giả định nó một cách an toàn là một ký tự ASCII.

Và điều đó có nghĩa là miễn là bạn chỉ cố gắng thay thế các ký tự ASCII bằng ký tự ASCII, thì str_replace sẽ an toàn.

+3

* Chỉ cố gắng thay thế các ký tự ASCII bằng ký tự ASCII. – Potatoswatter

+0

+1 để có giải thích đúng. Tôi nghĩ rằng những người khác đã cố gắng để nói điều tương tự, nhưng đây là câu trả lời duy nhất có ý nghĩa hoàn hảo với tôi. –

+0

@Potatoswatter: Vâng, đó là một điểm khá quan trọng. Đã chỉnh sửa. ;) – jalf

7

str_replace() là an toàn đối với bất kỳ ký tự an toàn ascii nào.

Btw, bạn cũng có thể nhìn vào nl2br()

1

1: Sử dụng đánh dấu mã mẫu cho mã trong câu hỏi của bạn.

Thứ hai: Có, nó được lưu.

3rd: Nó có thể không phải là những gì bạn muốn lưu trữ. Điều này có thể tốt hơn:

$var = str_replace(array("\r\n", "\n", "\r"), "<br/>", $var); 

Đừng quên rằng các hệ điều hành khác nhau xử lý các ngắt dòng khác nhau. Đoạn mã trên nên thay thế tất cả các ngắt dòng, bất kể chúng đến từ đâu.

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