Tôi có một biểu mẫu có văn bản. Người dùng nhập một khối văn bản được lưu trữ trong cơ sở dữ liệu.Làm cách nào để chuyển đổi từ dấu ngoặc kép thông minh và dấu gạch ngang trong chuỗi?
Thỉnh thoảng người dùng sẽ dán văn bản từ Word có dấu ngoặc kép thông minh hoặc các dấu gạch ngang. Các ký tự đó xuất hiện trong cơ sở dữ liệu dưới dạng: â € â € ™, â € œ, â €
Tôi nên gọi hàm nào trên chuỗi đầu vào là chuyển giá thông minh thành dấu ngoặc kép thường xuyên và dấu gạch ngang thường xuyên?
Tôi đang làm việc trong PHP.
Cập nhật: Cảm ơn tất cả các phản hồi tuyệt vời từ trước tới nay. Các trang trên trang web của Joel về mã hóa là rất nhiều thông tin: http://www.joelonsoftware.com/articles/Unicode.html
Một số lưu ý về môi trường của tôi:
Cơ sở dữ liệu MySQL đang sử dụng mã UTF-8. Tương tự như vậy, các trang HTML hiển thị nội dung đang sử dụng UTF-8 (Cập nhật :) bằng cách đặt rõ ràng loại nội dung meta.
Trên các trang đó, dấu ngoặc kép và các dấu gạch ngang thông minh xuất hiện dưới dạng hình thoi với dấu chấm hỏi.
Giải pháp:
Cảm ơn bạn đã trả lời. Giải pháp được gấp đôi:
- Đảm bảo rằng cơ sở dữ liệu và tệp HTML được đặt rõ ràng để sử dụng mã hóa UTF-8.
- Sử dụng
htmlspecialchars()
thay vìhtmlentities()
.
Điều này có vẻ như một "sửa chữa nhanh" hoàn hảo như vậy nhưng đáng buồn là nó làm cho trường hợp thử nghiệm của tôi tồi tệ hơn đáng kể bằng cách thêm * nhiều * ký tự không hợp lệ. –
Chuyển đổi từ tiếng Latinh 1 sang UTF-8 chỉ có ý nghĩa nếu bạn * biết * rằng bộ ký tự đầu vào là tiếng Latinh 1. Nhưng nếu đầu vào đã là UTF-8, bạn sẽ chỉ thêm nó bằng cách "dịch" nó từ tiếng Latin 1 với UTF-8 lần thứ hai. –