Câu hỏi của bạn là một tập hợp tuyệt vời các nhầm lẫn. Bạn quản lý để gây nhầm lẫn tất cả mọi thứ.
Hãy cố gắng sắp xếp nó ra.
Sử dụng PHP, cách tốt nhất để lưu trữ các ký tự đặc biệt (như sau) trong cơ sở dữ liệu MSQUL, để tránh tiêm.
Đây là những vấn đề không thể so sánh. Lưu trữ ký tự đặc biệt là một vấn đề và tránh tiêm là một vấn đề khác. hoàn toàn khác.
$book_text=htmlentities($book_text, "ENT_QUOTES");
đây là phần thú vị nhất. mặc dù nó được thiết kế để bảo vệ các truy vấn của bạn, nó thực sự không làm gì cả. Bởi vì thay vì hằng số ENT_QUOTES giá trị là 3 bạn đang sử dụng chuỗi ENT_QUOTES giá trị số là 0, vì vậy, bạn đang thiết lập không có cờ.
Nhưng ngay cả khi bạn đặt cờ này chính xác, nó sẽ không tự động bảo vệ bạn. Bởi vì một mã tiêm có thể không chứa các ký tự đặc biệt.
Để tránh tiêm, bạn phải tuân theo toàn bộ bộ quy tắc, không phải một hàm đơn giản "make_my_data_safe()". Không có cây đũa thần.
Xem this my answer để biết chi tiết.
Đối với các specialchars, thật đơn giản. Vấn đề duy nhất là KHÔNG có ký tự đặc biệt vững chắc nào được đặt. Có khác nhau ký tự đặc biệt cho các môi trường khác nhau.
- 'có ý nghĩa đối với các cơ sở dữ liệu và HTML
- <> có ý nghĩa cho HTML chỉ
- é à ù có ý nghĩa đối với chỉ HTML, phụ thuộc vào mã hóa.
bạn có sử dụng các quy tắc định dạng khác nhau cho mọi trường hợp không. Khác nhau, không phải là một duy nhất cho tất cả.
để sử dụng ký tự é à ù với HTML, bạn phải đặt tiêu đề HTTP thích hợp. để sử dụng é à ù với cơ sở dữ liệu, bạn phải đặt mã hóa bảng thành utf8 và mã hóa kết nối thành utf 8.
Nguồn
2012-04-12 05:23:11
utf8 là bạn của bạn –
'' ENT_QUOTES "' cần phải là 'ENT_QUOTES' (không có dấu ngoặc kép) vì nó là một hằng số được xác định trước PHP. Và tôi nghĩ rằng bạn có thể đặt nó nguyên trong DB và khi bạn muốn echo nó, bạn sử dụng 'htmlentities' –