Ghép và bộ ký tự không giống nhau. Collation của bạn cần phải phù hợp với bộ ký tự, vì vậy nếu bộ ký tự của bạn là utf-8, vì vậy nên collation. Chọn collation sai sẽ không garble dữ liệu của bạn mặc dù - Chỉ cần làm cho chuỗi so sánh/phân loại công việc sai.
Điều đó nói rằng, có một số địa điểm, nơi bạn có thể đặt cài đặt bộ ký tự trong PHP. Tôi khuyên bạn nên sử dụng utf-8 trong suốt, nếu có thể. Các địa điểm cần bộ ký tự được chỉ định là:
- Cơ sở dữ liệu. Điều này có thể được thiết lập trên cơ sở dữ liệu, bảng và cấp trường, và thậm chí trên một cấp cho mỗi truy vấn.
- Kết nối giữa PHP và cơ sở dữ liệu.
- Đầu ra HTTP; Đảm bảo rằng tiêu đề HTTP
Content-Type
chỉ định utf-8. Bạn có thể đặt các giá trị mặc định trong PHP và trong Apache, hoặc bạn có thể sử dụng hàm header
của PHP.
- Đầu vào HTTP. Nói chung, các biểu mẫu sẽ được gửi trong cùng một bộ ký tự khi trang được phân phối, nhưng để đảm bảo, bạn nên chỉ định thuộc tính
accept-charset
. Ngoài ra, hãy đảm bảo rằng URL được mã hóa utf-8 hoặc tránh sử dụng các ký tự không phải ascii trong các tham số của GET (và GET).
utf8_encode
/chức năng giải mã được đặt tên lạ. Chúng đặc biệt chuyển đổi giữa latin1 (ISO-8859-1) và utf-8. Nếu mọi thứ trong ứng dụng của bạn là utf-8, bạn sẽ không phải sử dụng chúng nhiều.
Có ít nhất hai gotchas liên quan đến utf-8 và PHP. Đầu tiên là các hàm dựng sẵn của PHP mong đợi các chuỗi là một byte. Đối với rất nhiều hoạt động, điều này không quan trọng, nhưng nó có nghĩa là bạn không thể dựa vào strlen
và các chức năng khác. Có một sự giảm xuống tốt về các giới hạn tại this page. Thông thường, nó không phải là một vấn đề lớn, nhưng đặc biệt là khi sử dụng thư viện của bên thứ ba, bạn cần phải nhận thức được rằng mọi thứ có thể bùng nổ về điều này. Một tùy chọn cũng là sử dụng phần mở rộng mb_string, trong đó có tùy chọn để thay thế tất cả các hàm phiền hà bằng các lựa chọn thay thế nhận thức utf-8. Nó vẫn không phải là một giải pháp chống đạn 100%, nhưng nó sẽ làm việc cho hầu hết các trường hợp.
Một vấn đề khác là một số cài đặt của PHP vẫn bật cài đặt magic_quotes
. Vấn đề này là trực giao với utf-8, nhưng có thể dẫn đến một số đầu gãi. Tắt nó đi, vì lợi ích của chính bạn.
Nó mentoined trong các ý kiến ở đâu đó, nhưng có, rất khó để bỏ lỡ! – Jrgns
Đối với bất kỳ ai chỉ đọc sách này (tính đến tháng 3 năm 2010), bài viết được tham chiếu bây giờ có thể được tìm thấy tại http://developer.loftdigital.com/blog/php-utf-8-cheatsheet – bdl