Đây là một vấn đề về bộ ký tự. Do đó, nó có thể bị sai ở nhiều cấp độ khác nhau, nhưng rất có thể, các chuỗi trong cơ sở dữ liệu của bạn được mã hóa utf-8 và bạn đang trình bày chúng dưới dạng iso-8859-1. Hoặc cách khác xung quanh.
Cách thích hợp để khắc phục sự cố này là chỉnh sửa các bộ nhân vật của bạn. Chiến lược đơn giản nhất, vì bạn đang sử dụng PHP, là sử dụng iso-8859-1 trong toàn bộ ứng dụng của bạn. Để làm điều này, bạn phải đảm bảo rằng:
- Tất cả các tệp nguồn PHP được lưu dưới dạng iso-8859-1 (Không nên nhầm lẫn với cp-1252).
- Máy chủ web của bạn được định cấu hình để phân phát tệp với
charset=iso-8859-1
- Ngoài ra, bạn có thể ghi đè cài đặt máy chủ web từ bên trong tài liệu PHP bằng cách sử dụng
header
.
- Ngoài ra, bạn có thể chèn thẻ meta vào HTML của mình, thẻ này chỉ định điều tương tự, nhưng điều này không hoàn toàn cần thiết.
- Bạn cũng có thể chỉ định
accept-charset
thuộc tính trên các <form>
phần tử của mình .
- Các bảng cơ sở dữ liệu được xác định với mã hóa là latin1
- Kết nối cơ sở dữ liệu giữa PHP tới và cơ sở dữ liệu được đặt thành latin1
Nếu bạn đã có dữ liệu trong cơ sở dữ liệu của mình, bạn nên biết rằng chúng có thể đã bị xáo trộn. Nếu bạn chưa ở trong giai đoạn sản xuất, chỉ cần xóa tất cả và bắt đầu lại. Nếu không, bạn sẽ phải thực hiện một số thao tác dọn dẹp dữ liệu.
Một lưu ý về thẻ meta, vì mọi người đều hiểu nhầm chúng là gì:
Khi máy chủ web phân phát một tệp (Tài liệu HTML), nó sẽ gửi một số thông tin, thông tin này không được hiển thị trực tiếp trong trình duyệt. Đây được gọi là tiêu đề HTTP. Một trong những tiêu đề như vậy, là Content-Type
tiêu đề, chỉ định kiểu mimetype của tệp (Ví dụ text/html
:) cũng như mã hóa (hay còn gọi là bộ ký tự). Mặc dù hầu hết các máy chủ web sẽ gửi một Content-Type
tiêu đề với charset
thông tin, nhưng nó là tùy chọn. Nếu nó không xuất hiện, thay vào đó, trình duyệt sẽ diễn giải bất kỳ thẻ meta nào với http-equiv="Content-Type"
. Điều quan trọng là nhận ra rằng thẻ meta chỉ được hiểu nếu máy chủ web không gửi tiêu đề. Trong thực tế, điều này có nghĩa là nó chỉ được sử dụng nếu trang được lưu vào đĩa và sau đó được mở từ đó.
Trang này có một giải thích rất tốt về những điều này.