Başka bir siteden file_get_contents ile veri alırken karakter seti uyuşmazlığından türkçe karakterler ekrana bozuk bir şekilde çıktı. Biraz araştırdıktan sonra mb_convert_encoding fonksiyonu ile karakter dönüştürmesi yaparak sorunu çözdüm. Bu fonksiyondan sizlere biraz bahsedeyim.
Fonksiyonun kullanışına gelecek olursak üç adet parametre almaktadır. Dönüştürülecek olan metni ilk parametre, hangi karakter setine dönüştüreceğimizi ikinci parametre, hangi karakter setinden dönüştüreceğimizi ise üçünücü parametre olarak giriyoruz.
Bu fonksiyonunun kullanımına bir örnek ile bakalım.
İlk olarak veri_cek.php adında bir sayfa oluşturuyoruz. Bu sayfanın karakter setini iso-8859-9 olarak belirliyoruz ;
<?php //sayfamızın karakter setini iso-8859-9 olarak belirliyoruz header('Content-Type: text/html; charset=iso-8859-9'); echo "Türkçe karakterler ÇçĞğıİÖöŞşÜü"; ?>
Daha sonra veri_goster.php adında bir sayfa oluşturalım ve karakter setini UTF-8 olarak belirleyelim.
<?php //Sayfamızın karakter setini UTF-8 olarak belirliyoruz header('Content-Type: text/html; charset=UTF-8'); $url = 'http://www.serkandaglioglu.com/demo/MbConvertEncoding/veri_cek.php' ; $kaynak = file_get_contents($url); echo $kaynak; ?>
İki sayfanında karakter seti farklı olmuş oldu. veri_goster.php sayfasında file_get_contents fonksiyonu ile veri_cek.php sayfasının içeriğini çekmiş olduk. Şimdi veri_goster.php sayfasını çalıştırdığımızda ekrana şöyle bir çıktı verecek.
Türkçe karakterleri gördüğünüz gibi ekrana bozuk çıktı. Türkçe karakterlerin sorunsuz bir şekilde gösterilmesi için mb_convert_encoding ile ISO-8859-9 karakter setinden UTF-8 e dönüşüm yapıyoruz. veri_goster.php dosyamızın son hali aşağıdaki gibi oluyor.
<?php header('Content-Type: text/html; charset=iso-UTF-8'); $url = 'http://www.serkandaglioglu.com/demo/MbConvertEncoding/veri_cek.php' ; $kaynak = file_get_contents($url); //Karakter dönüşümünü yapıyoruz $kaynak = mb_convert_encoding($kaynak, "UTF-8", "ISO-8859-9"); echo $kaynak; ?>
mb_convert_encoding() fonksiyonunu ekledikten sonra türkçe karakterler ekrana sorunsuz bir şekilde yazdırıldı.
Bu fonksiyonu php.net sayfasından daha detalı olarak inceleyebilirsiniz.
fikir ve komut doğru ancak örnek hatalı !
veri_cek.php olarak tanımladığın sayfanın karakter seti “iso-8859-9”
veri_goster.php sayfasının düzenledikten sonraki halinde yine karakter setini “iso-8859-9” olarak tanımlamışsın…
Yani “iso-8859-9” karakter setli bir veriyi yine “iso-8859-9” karakter setli bir sayfada görüntülemiş oldun. E doğal olarak mb_convert_encoding($kaynak, “UTF-8”, “ISO-8859-9”) yapmasan bile karakterler düzgün gözükecek…
neyse, ufak bir karışıklık olmuş diyelim… olur arada ;)
haklısın header deki charset UTF-8 olacaktı dikkatsizlik diyelim :)
çok işime yaradı çok teşekkürler :)