• 28-01-2007, 02:01:04
    #1
    Merhabalar,
    Kaç saatten beri yazdığım bir scriptin bir yerinde takılmış vaziyetteyim. Yapmak istediğim şeyi kısaca anlatmak gerekirse:
    Uzak sunucudaki bir XML dosyasından veri okutuyorum ve bunu yaparken de fopen() kullanıyorum (PHP CURL ile derlenmemiş). Kodun ilgili kısmı şöyle:
    	if (!($fp = fopen($url, "r"))) {
    	   die("XML adresine bağlanamadım.");
    	}
    	while ($getline = fread($fp, 4096)) {
    	   $data = $data . $getline;
    	}
    	print_r($data);
    Ama dönen sonuçtaki Türkçe karakterleri hiç bir zaman doğru görüntüleyemiyorum. Ve karakterler öyle insanın anlayabileceği türden de değil. Mesela "ı" (küçük I) harfi yerine ı, "ü" yerine ü, "ç" yerine ç ... gibi saçma sapan karakterler çıkıyor. Uzak sunucudaki XML dosyası için herhangi bir karakter kodu belirlenmemiş <?xml başlık etikedinde ve müdahale etme şansımda yok maalesef.
    fopen() 'ı "rb" parametresiyle denedim, read() fonksiyonunu denedim, file_get_contents() ile denedim sonuç hiç değişmiyor. Sanırım bu "whitespace" dedikleri dalgadan oluyor ya da \n, \r ve \t karakterlerinden, ama sorunu çözemedim.

    Ek olarak, dönen değerler tarayıcıda nasıl görüntüleniyorsa sayfa kaynağında da bire bir aynı görüntüleniyor. Üstteki kodun başına:
    header('Content-type: text/xml');
    yazdığımda hem FF hem de IE dosyayı direk olarak XML dosyası gibi açmasına rağmen IE TR karakterleri düzgün gösteriyor ama FF de durum aynı. Tarayıcıların ikisinin de dil ayarları aynı (iso-8859-9). Ve de tabi ki çağırdığım XML dosyası karaketerleri hem kaynak kodunda hem de tarayıcıda düzgün gösteriyor.

    Daha önce bu gibi bir durum başına gelen varsa, ya da konu hakkında bilgisi olan; yardım ederlerse çok memnun kalacağım.
  • 28-01-2007, 02:04:41
    #2
    Misafir
    eğer dosya 8899-9 ise
    header("Content-Type: text/xml; charset=ISO-8859-9");
    bunu dener misin
  • 28-01-2007, 02:09:33
    #3
    Haymac adlı üyeden alıntı: mesajı görüntüle
    eğer dosya 8899-9 ise
    header("Content-Type: text/xml; charset=ISO-8859-9");
    bunu dener misin
    Değişen bir şey yok, Türkçekaynaklı karakterlerde tarayıcı kaynaklı bir değiştirilme işe yaramıyor, bu fopen() laneti dosyayı okurken tanımadığı karakterleri okunamaz hale getiriyor. Ama fopen() ile TR bir siteyi okuttuğumda böyle bir şey olmuyor, kafam iyice karıştı..

    Bu arada uzaktaki dosyanın herhangi bir karakter kodlaması yok.
  • 28-01-2007, 02:12:52
    #4
    Misafir
    peki xml dosyası şu şekildemi ?
    <?xml version="1.0" encoding="iso-8859-9"?>
  • 28-01-2007, 02:15:25
    #5
    Haymac adlı üyeden alıntı: mesajı görüntüle
    peki xml dosyası şu şekildemi ?
    <?xml version="1.0" encoding="iso-8859-9"?>
    İşte anlatmak istediğim buydu, encoding denen bir olay yok dosyada direk <?xml version="1.0"?> ayrıca ben dosyayı çekip encoding="iso-8859-9" eklediğimde de bir şey değişmedi.
  • 28-01-2007, 02:33:12
    #6
    Misafir
    zoque de şöyle birşey buldum
    function tr($text){
    $tr_yanlis = array (
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    '&amp;Ccedil;','&amp;ccedil','&Ouml;','&ouml;','&Uuml;','&uuml;',
    '&ETH;','&eth;','&Yacute;','&yacute;','&THORN;','&thorn;',
    '&ETH;','&eth;','&Yacute;','&yacute;','&THORN;','&thorn;');
    //"'", '"'
    $tr_dogru = array  (
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
    'Ç','ç','Ö','ö','Ü','ü',
    'Ğ','ğ','İ','ı','Ş','ş',
    'Ğ','ğ','İ','ı','Ş','ş');
    //'&apos;','&quot;'
    $text = str_replace($tr_yanlis, $tr_dogru, $text); 
               return $text ; }
    bunu
    if (!($fp = fopen($url, "r"))) {
    die("XML adresine bağlanamadım.");
    }
    while ($getline = fread($fp, 4096)) {
    $data = $data . $getline;

    }
    $data= tr($data);
    print_r($data);
    şeklinde uygulasan
    ///// Tamamen teorik.
  • 28-01-2007, 02:36:00
    #7
    Çok sağol, güzel bir yaklaşım, biraz masraflı olsa da. Linki de veriri misin? Sorunun kaynağına da bir bakmak istiyorum.
  • 28-01-2007, 02:47:59
    #8
    Misafir
    google da xml fopen 8859-9 php problem diye aratınca geliyor.

    encodingleri farklı 2 rss ile ajax sorunu - Zoque.Forum
  • 28-01-2007, 03:05:11
    #9
    Haymac adlı üyeden alıntı: mesajı görüntüle
    google da xml fopen 8859-9 php problem diye aratınca geliyor.
    encodingleri farklı 2 rss ile ajax sorunu - Zoque.Forum
    Evet okudum az önce, Ceviz'de de bir kaç kaynak buldum. Sorun sadece bu XML lanetinde baş gösteriyormuş. header bilgisini charset="utf-8" yaptığımda çektiğim dosyadaki karakterler düzeldi ama bu seferde benim iso-8859-9 sitemin karakterleri gitti. Sadece okuğum bilgi
    $data= utf8_decode($data);
    şeklide çözdüğümde bu sefer iso-8859-1 sitede gözüken TR karakterler gibi karakterlerle karşılaştım ( utf8_decode() karakterleri iso-8859-1 olarak çözümlüyor). Yani doğru yoldayız Artık 3.parti bir karakter dönüştürme scripti kullanmaktan başka bir çare kalmadı.

    Yardımın ve konuya katılımın için çok teşekkürler Haymak, +rep.