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.

mb_convert_encoding

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ı.

mb_convert_encoding

Bu fonksiyonu php.net sayfasından daha detalı olarak inceleyebilirsiniz.