Çeşitli RSS beslemelerinden çok sayıda metin okuyorum ve bunları veritabanıma ekliyorum.
Tabii ki, beslemelerde kullanılan birkaç farklı karakter kodlaması vardır, örneğin UTF-8 ve ISO 8859-1.
Ne yazık ki, bazen metinlerin kodlanmasında sorunlar vardır. Misal:
"Fußball" daki "ß", veritabanımda şöyle görünmelidir: "Ÿ". Bir "Ÿ" ise, doğru şekilde görüntülenir.
Bazen, "Fußball" daki "ß" veritabanımda şöyle görünüyor: "ß". Sonra yanlış görüntülenir.
Diğer durumlarda, "ß" bir "ß" olarak kaydedilir - bu yüzden herhangi bir değişiklik yapılmaz. Sonra da yanlış görüntülenir.
2. ve 3. vakalardan kaçınmak için ne yapabilirim?
Her şeyi nasıl aynı kodlamayı, tercihen UTF-8 yapabilirim? Ne zaman kullanmalıyım utf8_encode()
, ne zaman kullanmalıyım utf8_decode()
(etkinin ne olduğu açıktır, ancak işlevleri ne zaman kullanmalıyım?) Ve girişle ne zaman hiçbir şey yapmam gerekir?
Her şeyi aynı kodlamayı nasıl yapabilirim? Belki de fonksiyonu ile mb_detect_encoding()
? Bunun için bir işlev yazabilir miyim? Yani benim sorunlarım:
- Metnin hangi kodlamasını kullandığını nasıl öğrenebilirim?
- Eski kodlama ne olursa olsun onu UTF-8'e nasıl dönüştürebilirim?
Böyle bir işlev işe yarar mı?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Test ettim, ama işe yaramıyor. Bunun nesi var?