Bazen curl ile bazen file_get_contents fonksiyonu ile websitelerinden içerik çekiyoruz bu sitelerin karakter kodlamasına kendi içinde müdahale edemediğimizden dolayı eğer biz utf-8 formatında veya belirlediğimiz bir formatta göstermek istesekte karşı siteden çekilen sitenin karakter kodlaması farklı olduğundan bolca Türkçe karakter hatasıyla karşı karşıya kalıyoruz. Bu uyuşmazlığı nasıl ortadan kaldırabiliriz bugün kendime notlarım arasında bunu paylaşmayı uygun gördüm.

Öncelikle veri çekeceğimiz sitenin meta kısmında bulunan karakter kodlamasını kaynağı görüntüleyerek bulalım.

Örneğimizde veri çekeceğimiz sitenin karakter kodlaması ISO-8859-9 olsun.

Kendi sitemizde curl fonksiyonumuzun veya file_get_contents fonksiyonumuzun başına daha doğrusu hangi yöntemle çekiyorsak; şu kodu ekleyerek. Çekeceğimiz verinin de aynı karakterde olmasını söylüyoruz.

header('Content-type: text/html; charset=ISO-8859-9');

Bu şekilde aslında tüm siteyi problemsiz şekilde çekebiliyoruz. Durumu biraz daha karmaşıklaştıralım. Biz ISO-8859-9 seti ile çektik ama bunun utf-8 olmasını veritabanımıza da o şekilde kaydedilmesini istiyorsak ne olacak?

function file_get_contents_utf8($fn) {
	$content = file_get_contents($fn);
	return mb_convert_encoding($content, 'UTF-8',
	mb_detect_encoding($content, 'UTF-8, ISO-8859-9', true));
}

Yukarıdaki fonksiyonla ISO-8859-9 karakter setinden utf-8 karakter setine problemsiz dönüş yaptık. Karşı sitenin linkini daha önce;

$link	= "http://okandiyebiri.com";
$icerik = file_get_contents("$link");

Şeklinde çekiyorduk artık işin içine bir üstteki fonksiyonumuzu da katacağımızdan şu şekilde çekmemiz gerek.

$link	= "http://okandiyebiri.com";
$icerik = file_get_contents_utf8("$link");

Yine veritabanımıza utf-8 ile kaydettirip, sayfalarımızın metasını da utf-8 şeklinde ayarlıyoruz. Umarım bu konu size yardımcı olmuştur. Aklınıza takılan yerleri yorum kısmında belirtebilirsiniz.