Tôi đang đọc rất nhiều văn bản từ nhiều nguồn cấp RSS khác nhau và chèn chúng vào cơ sở dữ liệu của tôi.
Tất nhiên, có một số mã hóa ký tự khác nhau được sử dụng trong các nguồn cấp dữ liệu, ví dụ UTF-8 và ISO 8859-1.
Thật không may, đôi khi có vấn đề với mã hóa của các văn bản. Thí dụ:
"Ss" trong "Fußball" sẽ trông như thế này trong cơ sở dữ liệu của tôi: "Ÿ". Nếu là "Ÿ", nó được hiển thị chính xác.
Đôi khi, "ß" trong "Fußball" trông như thế này trong cơ sở dữ liệu của tôi: "ß". Sau đó, nó được hiển thị sai, tất nhiên.
Trong các trường hợp khác, "ß" được lưu dưới dạng "ß" - vì vậy không có bất kỳ thay đổi nào. Sau đó, nó cũng được hiển thị sai.
Tôi có thể làm gì để tránh trường hợp 2 và 3?
Làm cách nào tôi có thể tạo mọi thứ cùng mã hóa, tốt nhất là UTF-8? Khi nào tôi phải sử dụng utf8_encode()
, khi nào tôi phải sử dụng utf8_decode()
(rõ ràng hiệu ứng là gì nhưng khi nào tôi phải sử dụng các chức năng?) Và khi nào tôi phải làm gì với đầu vào?
Làm thế nào để tôi làm cho mọi thứ cùng mã hóa? Có lẽ với chức năng mb_detect_encoding()
? Tôi có thể viết một chức năng cho việc này? Vì vậy, vấn đề của tôi là:
- Làm thế nào để tôi tìm ra những gì mã hóa văn bản sử dụng?
- Làm cách nào để chuyển đổi nó thành UTF-8 - bất kể mã hóa cũ là gì?
Một chức năng như thế này sẽ làm việc?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Tôi đã thử nó, nhưng nó không hoạt động. Có gì sai với nó?