• 18-08-2010, 11:51:42
    #1
    Merhaba arkadaşlar, öncelikle belirteyim. Forumda konuyla ilgili arama yaptım ama sorunumu çözemedim.

    PHP ile oluşturduğumuz kullanıcı izleme sistemi için üye sitelere aşağıdakine benzer php kodu veriyoruz.

    <?php
    
    $var=file_get_contents("www.site.com/index.php?uye id=xxx");     // xxx = üyenin id'si
     
    print $var ;
    ?>
    Sorun şu ki , üyenin bu kodu koyduğu site utf-8 veya iso-8859-9 ise karakterlerle kodlanmışsa bozulmalar oluyor. En başta şunu belirtmeliyim ki , vereceğimiz bu kod sabit olmalı. Yani her kullanıcıda kod değiştiremeyiz.

    site.com üzerindeki index.php sayfasında ise her türlü kodlamayı denedim. utf-8 , iso-8859-9 , hatta hiç kodlama belirtmeden denedim ama sorunum

    çözülmedi.


    Bu kodu kullanacak örnek 2 tane site var. Biri utf-8 ile kodlanmış. Diğeri ise iso-8859-9.

    Kod, iso-8859-9 la kodlanmış siteye konulduğunda sorun çıkartmıyor ama utf-8 liye konulduğunda sorun çıkartıyor.

     print iconv('iso-8859-9', 'utf-8//TRANSLATE', $var);
    kodunu kullandığımda da utf-8 li sitede düzeliyor ama bu sefer de iso-8859-9 lu site bozuluyor.


    Şimdilik çözüm, utf-8 li site bu kodu kullanırken ilgili php dosyasını "farklı kaydet" kısmından utf-8 olarak kaydetmeli. Ama bunu her kullanıcının

    yapmasını isteyemem.


    iconv fonksiyonunu if bloğuna alıp o şekilde ekrana bastırmak aklıma geldi ama if şartını neye göre sağlayacağımı bilmiyorum. Örnek ;

    <?php
    
    $var=file_get_contents("www.site.com/index.php?uye_id=xxx"); 
    
    if ( ??? koşulu ) {
     print iconv('iso-8859-9', 'utf-8//TRANSLATE', $var);
    
    }
    
    else{
    print $var ;
    
    }
    
    ?>

    Şimdiden herkese teşekkürler. 2 gündür bu sorunla uğraşıyorum
  • 18-08-2010, 12:18:00
    #2
    Üyeliği durduruldu
    veriyi aldığın sitenin head kısmından kodlamasını öğrenip ona göre iconv kullanabilirsin
  • 18-08-2010, 12:25:00
    #3
    Hyperion adlı üyeden alıntı: mesajı görüntüle
    veriyi aldığın sitenin head kısmından kodlamasını öğrenip ona göre iconv kullanabilirsin
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Şu kısımı preg match ile almamdan bahsediyorsunuz değil mi ? Eğer doğru anladıysam kullanıcıya vereceğim kod biraz daha çoğalmış olacak sanki.

    Bazı sitelerde denk geliyorum kodlama yanlışlığı olsa gerek, charset metası birden fazla kullanılmış. Hem utf-8, hem iso-8859-9 hem de windows-1254 var. Bu gibi durumda hangisi geçerli olur acaba ?

    Örn .

    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
  • 18-08-2010, 12:31:12
    #4
    Üyeliği durduruldu
    eagle_one adlı üyeden alıntı: mesajı görüntüle
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Şu kısımı preg match ile almamdan bahsediyorsunuz değil mi ? Eğer doğru anladıysam kullanıcıya vereceğim kod biraz daha çoğalmış olacak sanki.

    Bazı sitelerde denk geliyorum kodlama yanlışlığı olsa gerek, charset metası birden fazla kullanılmış. Hem utf-8, hem iso-8859-9 hem de windows-1254 var. Bu gibi durumda hangisi geçerli olur acaba ?

    Örn .

    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
    evet ondan bahsediyorum...

    3 metalı sitelere gelince, utf8 kullanmayı bir dene localde... olmazsa preg_match ile metaları aldırır
    ne kadar varsa hepsini echo edersin ^^
  • 18-08-2010, 12:38:45
    #5
    Teşekkür ediyorum. metayı nasıl almam gerektiğiyle ilgili biraz preg match araştırması yapmam gerekiyor. Sonucu yazacağım buraya
  • 18-08-2010, 13:13:58
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    eagle_one adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ediyorum. metayı nasıl almam gerektiğiyle ilgili biraz preg match araştırması yapmam gerekiyor. Sonucu yazacağım buraya
    $meta = preg_match('~<meta http-equiv="Content-Type" content="text\/html; charset=([^"]+)" \/>~i', $icerik, $match) ? $match[1] : '';
  • 18-08-2010, 13:49:02
    #7
    Teşekkür ederim by_grafitus Aslında basit bir sorunum daha var. Bu match eşleşmesini kullanıcı kendi sitesinde yapacak. $icerik değişkeni bu kodun işlendiği sayfa olacak yani. file_get_contents ile çalıştığı sayfayı alamıyorum nedense. Örnek.

    kullanicininsitesi.com


    html tagları . . .  v.s.
    v.s.
    v.s.
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    v.s.. ..
    ..
    .
    
    <?php 
    $meta = preg_match('~<meta http-equiv="Content-Type" content="text\/html; charset=([^"]+)" \/>~i', $icerik, $match) ? $match[1] : '';
    
    ?>
    İşte burada $icerik değişkeni scriptin çalıştığı sayfa olduğundan kafam karıştı.
  • 18-08-2010, 19:27:20
    #8
    Sorun arkadaşın yardımıyla çözüldü. Kullanıcıların çektiği sayfada şu fonksiyonu çalıştırtmam yeterli oldu.

    function kod($text1){
        $gkodt1 = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü");
        $dkodt1 = array("ç","Ç","ğ","Ğ","ı","İ","ö","Ö","ş","Ş","ü","Ü");
       
        $ykodt1 = str_replace($gkodt1,$dkodt1,$text1);
        return $ykodt1;
    }
    //Fonksiyon bitiş