• 05-11-2009, 15:31:27
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    latin5_turkish_ci - iso-8859-9 dan utf8_turkish_ci - utf-8
    geçiş işini daha fazla ertelemek istemiyorum hazır boş boş oturuyorken ve "utf8 çok iyidir utf8 süperdir" safsatalarına dayanamayıp başladım ve keyfimi kaçıran tonla değişiklik yapmak zorunda kaldım.


    Bildiğiniz gibi, Türkçe karakterler utf-8 de birden çok karakter ile kodlanıyor,
    dolayısıyla str* fonksiyonları yazıdaki harfleri küçültemiyor, büyütemiyor, tersine çeviremiyor hatta uzunluğu dahi doğru alamıyor...

    Şimdilik aşağıdaki fonksiyonların utf-8 multibytelı harflerde işini yapamadığını fark ettim,
    çözüm arıyorum fakat bulduğum çözümler (multibyte) - mb_ fonksiyonlarını, iconv veya gereksiz satırlarca kod kullanmadan bu iş olmaz dercesine işi çıkmaza sokuyor.
    ve bechmark testleri en basit str komutunu mb_str ile yapmanın işi (belki kimsenin fark etmeyeceği bir süre olsa dahi) ağırlaştırdığını ıspatlıyor(http://php.net/mb_strlen 3.yorum),
    iconv ile yapmanın daha da ağırlaştırdığını test etmesem de aynı olduğuna eminim.

    strtr
    strtolower
    strtoupper
    strrev
    substr
    strrpos
    strrchr
    strlen ...
    vesaire str komutlarıyla, türkçe karakter çalışmaları sorunsuz yapabildiniz mi ?

    Örneğin;

    echo strrev('öçşğüı-ĞÜŞIİÖÇ');	//komut çıktısı �Öð�I�ŜÞ�-�ļßğŧö�
    
    echo strlen('şö');              //komut çıktısı 2 olmalıyken 4 oluyor,
    
    echo strtr('ışıkları öğlen ört çabuk lütfen','ğüşıiöç', 'ĞÜŞIİÖÇ'); //I�ŞI�klarI� ÖI�len Ört Çabuk lÜtfen
  • 05-11-2009, 15:38:09
    #2
    Üyeliği durduruldu
    php sayfalarinizin dosya kodlamasida utf-8 ise sorun yaşamazsiniz.
  • 05-11-2009, 15:44:08
    #3
    sayfalar utf-8 w/o bom şeklinde
    veritabanı ve bağlantısı utf8 - utf8_turkish_ci şeklinde

    notepad++ ile çalışıyorum, dw ile de denedim
    standart dil utf8_without_bom yapısında

    buyrun, isterseniz bir de siz deneyin.
    http://rapidshare.com/files/302744227/test.rar.html
  • 05-11-2009, 16:10:00
    #4
    Üyeliği durduruldu
    Evet haklisiniz. Turkce karakterler multi byte ondan 2 karakterlik yer kapliyorlar,

    <?
    mb_internal_encoding("UTF-8");
    echo mb_strlen('şö');
    ?>
    http://tr.php.net/manual/en/ref.mbstring.php

    Encoding donusumu fonksiyonunuda video olarak anlatmistim;
    http://www.programlamatv.com/ders/ph...ng-fonksiyonu/
  • 05-11-2009, 16:27:41
    #5
    Dediğim gibi, neredeyse tüm str fonksiyonları işini yapamıyor,


    Bu problemi keşfeden ben değilim, elbette birçok kişi bu sorunla karşılaşmıştır veya farkında değildir.

    Bu sorunu mb_, iconv harici bir yolla veya basit bir şekilde toptan çözebilmenin bir yolu olmalı ama nasıl ?


    mb_internal_encoding('utf-8');
    
    echo mb_strtolower('Ğğ - Üü - Şş - Iİıi - Öö - Çç');		//ğğ - üü - şş - iiıi - öö - çç -- büyük I harfi arızalı, i olarak küçültüyor
    
    echo mb_strtoupper('Ğğ - Üü - Şş - Iİıi - Öö - Çç');		//ĞĞ - ÜÜ - ŞŞ - IİII - ÖÖ - ÇÇ -- küçük i harfi arızalı, I olarak büyütüyor
  • 06-11-2009, 17:26:47
    #6
    Üyeliği durduruldu
    inanilmaz adlı üyeden alıntı: mesajı görüntüle
    Dediğim gibi, neredeyse tüm str fonksiyonları işini yapamıyor,


    Bu problemi keşfeden ben değilim, elbette birçok kişi bu sorunla karşılaşmıştır veya farkında değildir.

    Bu sorunu mb_, iconv harici bir yolla veya basit bir şekilde toptan çözebilmenin bir yolu olmalı ama nasıl ?


    mb_internal_encoding('utf-8');
    
    echo mb_strtolower('Ğğ - Üü - Şş - Iİıi - Öö - Çç');        //ğğ - üü - şş - iiıi - öö - çç -- büyük I harfi arızalı, i olarak küçültüyor
    
    echo mb_strtoupper('Ğğ - Üü - Şş - Iİıi - Öö - Çç');        //ĞĞ - ÜÜ - ŞŞ - IİII - ÖÖ - ÇÇ -- küçük i harfi arızalı, I olarak büyütüyor
    yapar. mb_internal_encoding deki karakterseti php dosya encodingi ve sayfa charset i ile aynı olursa sorun yaşanılmaz.
    örnekleyeyim;
    header('content-type: text/html; charset=utf-8');
    mb_internal_encoding('utf-8');
    echo mb_strtolower('Ğğ - Üü - Şş - Iİıi - Öö - Çç');
    echo mb_strtoupper('Ğğ - Üü - Şş - Iİıi - Öö - Çç');
    yukarıdaki kodu mb_test.php adında encodingini utf-8 olarak kaydet ve çalıştır.
  • 06-11-2009, 21:34:39
    #7
    Iİıi
    iiıi
    ğğ - üü - şş - iiıi - öö - çç


    Iİıi
    IİII
    ĞĞ - ÜÜ - ŞŞ - IİII - ÖÖ - ÇÇ


    Bunu da geçtim. Derdim, phpextension yüklemeden, mb_string, iconv vesaire kullanmadan çözmek.


    Uyuyan yılanı uyandırdım,
    birçok arkadaşım bu sorunun onlarda da olduğunu "ben söyledikten sonra" fark etti.
  • 06-11-2009, 21:56:02
    #8
    Üyeliği durduruldu
    inanilmaz adlı üyeden alıntı: mesajı görüntüle
    Iİıi
    iiıi
    ğğ - üü - şş - iiıi - öö - çç


    Iİıi
    IİII
    ĞĞ - ÜÜ - ŞŞ - IİII - ÖÖ - ÇÇ


    Bunu da geçtim. Derdim, phpextension yüklemeden, mb_string, iconv vesaire kullanmadan çözmek.


    Uyuyan yılanı uyandırdım,
    birçok arkadaşım bu sorunun onlarda da olduğunu "ben söyledikten sonra" fark etti.
    derdini zaten biliyorum. setlocale() ile fonksiyonların türkçe karakterlerde sorun çıkarmamasını ayarlayabiliyorsun fakat PHP 5.3.0 beta2-dev ve sonraki çıkacak sürümler ile bu yöntemi kullanabilirsin. alt sürümlerde setlocale() bugu mevcut, karakter çevrimleri sorunlu. setlocale yi kullanacagım diye kalkıp php sürümünü PHP 5.3.0 e yükseltmen sana çeşitli sorunlar ve uyumsuzluklara yol açar.
  • 06-11-2009, 22:01:21
    #9
    Üyeliği durduruldu
    php6 da en büyük zaten oluşum bu dil olayi ile ilgili diye biliyorum. bakalım görcez inşallah onuda