Việc chuyển đổi rất dễ dàng. Phát hiện là phần khó khăn. Bạn có thể thử mb_detect_encoding nhưng đó là một phương pháp rất run rẩy, nghĩa là "đoán" loại nội dung và @troelskn nổi bật trong nhận xét có thể đoán sự khác biệt "thô" ở mức tốt nhất (Có phải mã hóa nhiều byte không?) Nhưng không phát hiện được sắc thái của các bộ ký tự tương tự.
Cách thích hợp sẽ là IMO:
- Giải thích bất kỳ
content-type
thẻ Meta trong trang
- Giải thích bất kỳ
content-type
tiêu đề gửi bởi máy chủ
- Nếu điều đó mang lại gì cả, cố gắng "sniff" các mã hóa bằng cách sử dụng mb_detect_encoding()
- Nếu điều đó không có gì, hãy quay trở lại mặc định đã xác định (có thể là ISO-8859-1, có thể là UTF-8).
Khác với hướng dẫn trong câu trả lời của @ Gumbo, cá nhân tôi nghĩ rằng thẻ Meta nên được ưu tiên hơn tiêu đề máy chủ vì tôi chắc chắn rằng nếu thẻ Meta hiện diện, đó là chỉ báo đáng tin cậy hơn mã hóa thực tế của trang so với cài đặt máy chủ mà một số nhà khai thác trang web thậm chí không biết cách thay đổi. Tuy nhiên, cách chính xác dường như là để xử lý các tiêu đề loại nội dung có mức độ ưu tiên cao hơn.
Đối với trước đây, tôi nghĩ bạn có thể sử dụng get_meta_tags(). Sau này bạn sẽ nhận được từ curl đã có, bạn sẽ chỉ phải phân tích nó. Here là một ví dụ đầy đủ về cách xử lý các tiêu đề phản hồi được phục vụ bởi cURL.
Việc chuyển đổi sau đó sẽ được sử dụng iconv:
$new_content = iconv("incoming-charset", "utf-8", $content);
Nguồn
2010-03-24 19:47:38
Ooohh ngọt ngào! Tôi sẽ kiểm tra ổ đĩa này khi tôi tìm thấy thời gian. –
Cảm ơn bạn đã chia sẻ, bạn đã cứu mạng tôi! : D –
Thực hiện tốt, nhưng trong trường hợp chúng tôi thực hiện một số quy trình xử lý tiếp theo, chúng tôi muốn sửa các thẻ và khi chúng tôi thực hiện. Tôi đã tự do cập nhật mã của bạn với ý nghĩ đó. – DomQ