2015-09-17 13 views
5

Mã hóa ký tự luôn là vấn đề đối với tôi. Tôi không thực sự nhận được khi nào đúng thời điểm để sử dụng nó.Khi nào là thời điểm chính xác để sử dụng utf8_encode và utf8_decode?

Tất cả cơ sở dữ liệu tôi sử dụng bây giờ tôi đã thiết lập với utf8_general_ci, vì điều đó có vẻ như là một khởi đầu 'chung' tốt. Tôi đã học được trong năm phút qua rằng nó không phân biệt chữ hoa chữ thường. Vì vậy, đó là hữu ích.

Nhưng câu hỏi của tôi là khi nào sử dụng utf8_encodeutf8_decode? Theo như tôi có thể thấy bây giờ, Nếu tôi $ _POST một biểu mẫu từ một bảng trên trang web của tôi, tôi cần phải utf8_encode() giá trị trước khi tôi chèn nó vào cơ sở dữ liệu.

Sau đó, khi tôi kéo nó ra, tôi cần phải utf8_decode nó. Đó là trường hợp? Hay tôi đang thiếu một cái gì đó?

+0

Tôi cũng khuyên * [gì Mỗi Programmer Tuyệt đối, tích cực cần biết về Mã hoá Và Character Sets Để làm việc với Text] (http://kunststube.net/encoding/)*. – deceze

+0

Chỉ làm cho trang web của bạn UTF-8, sau đó bạn không bao giờ phải lo lắng về việc mã hóa và giải mã một lần nữa.'Utf8_general_ci' chỉ là đối chiếu và không có bất kỳ ảnh hưởng nào đến cách dữ liệu được lưu trữ. Tôi đã thực hiện một [tổng quan] nhỏ (http://www.martinstoeckli.ch/php/php.html#utf8) các bước cần thiết. – martinstoeckli

+0

@martinstoeckli Để trở nên khủng khiếp ... nếu collation là 'utf8_blablabla', điều đó ngụ ý rằng mã hóa cột phải là' utf8' ... correlation! = Causation, nhưng chúng được liên kết chặt chẽ trong trường hợp này ...;) – deceze

Trả lời

-1

Về cơ bản utf8_encode được sử dụng cho Encodes an ISO-8859-1 string to UTF-8. Khi bạn đang làm việc trên bản dịch như Một ngôn ngữ sang ngôn ngữ khác, bạn phải sử dụng chức năng này để ngăn không cho hiển thị một số ký tự rác.

Giống như khi bạn hiển thị ký tự tiếng Tây Ban Nha hơn một số tập lệnh thời gian không nhận ra ký tự tiếng Tây Ban Nha và nó sẽ hiển thị một số ký tự rác thay vì ký tự tiếng Tây Ban Nha.

Vào thời điểm đó, bạn có thể sử dụng.

Để biết thêm tham khảo về vấn đề này xin vui lòng đi theo liên kết này:

http://php.net/manual/en/function.utf8-encode.php

4

utf8_encode_decode là misnomers khá xấu. Điều duy nhất mà các chức năng này thực hiện là chuyển đổi giữa mã hóa UTF-8 và ISO-8859-1. Chúng thực hiện tương tự như iconv($str, 'ISO-8859-1', 'UTF-8')iconv($str, 'UTF-8', 'ISO-8859-1') tương ứng. Không có ma thuật nào khác đang diễn ra mà sẽ đòi hỏi việc sử dụng chúng.

Nếu bạn nhận được chuỗi mã hóa UTF-8 từ trình duyệt và bạn muốn chèn nó dưới dạng UTF-8 vào cơ sở dữ liệu bằng kết nối cơ sở dữ liệu với bộ ký tự utf8, hoàn toàn không sử dụng cho bất kỳ chức năng nào ở đây chuỗi. Bạn không quan tâm đến việc chuyển đổi mã hóa ở tất cả ở đây, và đó nên là mục tiêu.

Lần duy nhất bạn có thể sử dụng một trong hai chức năng là bạn cần chuyển đổi từ UTF-8 sang ISO-8859-1 hoặc ngược lại tại bất kỳ thời điểm nào, vì dữ liệu ngoài được mã hóa trong mã hóa này hoặc hệ thống bên ngoài dữ liệu trong bảng mã này. Nhưng thậm chí sau đó, tôi muốn sử dụng rõ ràng hơn iconv hoặc mb_convert_encoding, vì nó làm cho nó rõ ràng hơn và rõ ràng những gì đang xảy ra. Và trong ngày và tuổi này, UTF-8 phải là mã hóa go-to mặc định mà bạn sử dụng trong suốt, do đó, cần có rất ít nhu cầu chuyển đổi như vậy.

Xem:

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