• 20-12-2010, 00:23:57
    #1
    Herkese merhabalar.

    Twitter'a PHP ile durum güncellemesi yapmaya çalışıyorum. Ancak mesajda Türkçe karakterler çıktığında 140 karakter de olsa, Twitter onu keserek koyuyor. Aşağıdaki adreste de görebilirsiniz ki, Twitter da bunu demiş

    http://dev.twitter.com/pages/counting_characters

    Bunu yaparken de şunu fark etmiştim. Belki yıllardır kullanıyordum bunu ama, ilk defa fark ediyorum. Şöyle ki;

    $kelime = 'Beşiktaş';
    echo strlen($cumle); // çıktı 10
    echo mb_strlen($cumle); // çıktı 8
    İlk kullanımdaki "ş" harfleri, kelimenin karakter sayısını 2 yükseltiyor. mb_ eki ile bunu normale getiriyoruz. Ancak bunu Twitter'a göndermek istediğimde yine 10 karakter olarak sayıyor...

    Alıntı
    istenilen: bakın şimdi bir kez daha uzun tivit denemesi yapıyoruz ama bu sefer mesajı post etmek yerine doğrudan doğruya kodun içine gömüyoruz ki olsun

    Twitter'da çıkan: bakın şimdi bir kez daha uzun tivit denemesi yapıyoruz ama bu sefer mesajı post etmek yerine doğrudan doğruya kodun içine gömüyoruz
    Görüldüğü gibi "ki olsun" dışarıda kaldı.

    Twitter sayfasında, karakter sayımı için "Normalizer class" kullanılabilir demiş. Yönlendirdiği yer burası: http://php.net/manual/tr/normalizer.normalize.php Ancak ne yaptıysam da bunu kullanamadım. Kendime ait sunucu var. PHP 5.3.4 yüklü, PECL intl de yüklü. İlgili sayfadaki örneklerdeki her şekili denedim. Ama formu gönderdikten sonra, "Sayfa bulunamadı" hatası veriyor.

    Bu fonksiyonu nasıl kullanabileceğimi bilenleriniz var mıdır?
  • 20-12-2010, 03:13:25
    #2
    Türkçe karakterler latin karakterleri gibi değil latin karakterler 16 lık sistemde şöyle tanımlanır
    a = 0x61
    b = 0x62
    c = 0x63
    gibi en düşük sayı 0x00 dır en büyüğü 0xFF yani en büyük tek byte değer eğer 0 ı da sayarsak maximum 256 farklı karakter içerebilir ama 256 karakterle tüm dillerdeki karakterleri kapsatamıyacağımız için ç,ı,ğ,ü gibi karakterleri minimum 2 byte ile tanımlayabiliyoruz mesela
    ğ = 0xC4 , 0x9F
    o yüzden türkçe karakterler latince karakterlerden 2 kat fazla yer kaplar
    http://www.utf8-chartable.de/unicode...ames=-&utf8=0x

    bu iş için doğrusu str_len dir mb_strlen değil