Türkçe Karakter Destekli Ucwords() Fonksiyonu

php
Bilginiz gibi ucwords() fonksiyonu türkçe karakterleri desteklemiyor. Php.net’te yayınlanan fonksiyonumu burada da paylaşmak istedim.

<?php
function ucwords_tr($gelen){

  $sonuc='';
  $kelimeler=explode(" ", $gelen);

  foreach ($kelimeler as $kelime_duz){

    $kelime_uzunluk=strlen($kelime_duz);
    $ilk_karakter=mb_substr($kelime_duz,0,1,'UTF-8');

    if($ilk_karakter=='Ç' or $ilk_karakter=='ç'){
      $ilk_karakter='Ç';
    }elseif ($ilk_karakter=='Ğ' or $ilk_karakter=='ğ') {
      $ilk_karakter='Ğ';
    }elseif($ilk_karakter=='I' or $ilk_karakter=='ı'){
      $ilk_karakter='I';
    }elseif ($ilk_karakter=='İ' or $ilk_karakter=='i'){
      $ilk_karakter='İ';
    }elseif ($ilk_karakter=='Ö' or $ilk_karakter=='ö'){
      $ilk_karakter='Ö';
    }elseif ($ilk_karakter=='Ş' or $ilk_karakter=='ş'){
      $ilk_karakter='Ş';
    }elseif ($ilk_karakter=='Ü' or $ilk_karakter=='ü'){
      $ilk_karakter='Ü';
    }else{
      $ilk_karakter=strtoupper($ilk_karakter);
    }

    $digerleri=mb_substr($kelime_duz,1,$kelime_uzunluk,'UTF-8');
    $sonuc.=$ilk_karakter.kucuk_yap($digerleri).' ';

  }

  $son=trim(str_replace('  ', ' ', $sonuc));
  return $son;

}

function kucuk_yap($gelen){

  $gelen=str_replace('Ç', 'ç', $gelen);
  $gelen=str_replace('Ğ', 'ğ', $gelen);
  $gelen=str_replace('I', 'ı', $gelen);
  $gelen=str_replace('İ', 'i', $gelen);
  $gelen=str_replace('Ö', 'ö', $gelen);
  $gelen=str_replace('Ş', 'ş', $gelen);
  $gelen=str_replace('Ü', 'ü', $gelen);
  $gelen=strtolower($gelen);

  return $gelen;
}

echo ucwords_tr('ŞEKardi ŞEMŞİYE ĞELENÖ ÖMER'); // Şekardi Şemşiye Ğelenö Ömer
echo ucwords_tr('şEKER iMSAK şÖLEN'); // Şeker İmsak Şölen
?>

PHP.net Ucwords()

Bu sayfa 1.089 kez görüntülendi.

Ahmet

Sıradan bloglardan birisi :) Google+

Bunlar da hoşunuza gidebilir...

20 Cevaplar

  1. Adaş dedi ki:

    Tebrik ve teşekkür ederim

  2. Donttouch dedi ki:

    Neden kendinizi yoruyorsunuz? Zamanınızı boşa harcıyorsunuz.

    o kadar satırın karşılığı :

    $deger = mb_convert_case($deger, MB_CASE_TITLE, “iso-8859-9”);

    • Ahmet dedi ki:

      $deger = mb_convert_case(‘işin iş’, MB_CASE_TITLE, “iso-8859-9″);

      Şu tek satırlık fonksiyonu bir de UTF-8’de görelim 🙂

      • Adnan dedi ki:

        Gayette güzel çalışıyor UTF-8 ile. Sen sayfanı UTF-8 yapmazsan fonksiyon ne yapsın Ahmetcim? O kadar kodunu tek satırda öpüp attı.

        • Ahmet dedi ki:


          < ?php header('Content-Type: text/html; charset=utf-8'); echo mb_convert_case('işin iş', MB_CASE_TITLE, 'UTF-8'); ?>

          Merhaba Adnan,
          Yukarıdaki kod ekrana “Işin Iş” yazar. “İşin İş” yazmaz. Onun içinde Türkçe karakterlerde maalesef işe yaramaz 🙁
          Bilginize, iyi çalışmalar.

          • M Fatih dedi ki:

            Arkadaşlar tartışmaya gerek yok.. UTF8 de ki tek problem i -> İ dönüşümünde yaşanır.. onu da şu şekilde çözmek mümkün:

            function ilkBuyuk($str) {
            return ltrim(mb_convert_case(str_replace(‘i’, ‘İ’,$str), MB_CASE_TITLE, ‘UTF-8’));
            }

            echo ilkBuyuk(‘fıstıkçı şahap çek bir ıhlamur işin iş önce üretim’);
            Çıktısı:
            Fıstıkçı Şahap Çek Bir Ihlamur İşin İş Önce Üretim

  3. Ramazan dedi ki:

    Güzel bir paylaşım ve çalışıyor. Teşekkürler…

  4. Ahmet dedi ki:

    Performans sonuçlarını incelediğimizde;

    ilkBuyuk() Fonksiyonu
    0.077962875366211 microseconds

    ucwords_tr() Fonksiyonu
    0.34689903259277 microseconds

    M Fatih’in verdiği fonksiyon yaklaşık olarak 4.4 kat daha hızlı görünüyor. ilkBuyuk() Fonksiyonunu kullanmanızı şiddetle tavsiye ederim…

    Teşekkürler, M Fatih…

  5. Ahmet A dedi ki:

    M Fatih’in kodu 10 numara… tekerleği tekrar icat etmeye gerek yok… ucwords_tr fonksiyonu ciddi kod kiriliği…

  6. Kaan dedi ki:

    Kodun final halinide ben vereyim o zaman, küçük i lerde problem olduğu gibi büyük I larda da problem olmaktadır.

    Final:

    function ucwords_tr($str) {
    return ltrim(mb_convert_case(str_replace(array(‘i’,’I’), array(‘İ’,’ı’),$str), MB_CASE_TITLE, ‘UTF-8’));
    }

  7. Kağan dedi ki:

    Budur arkadaşlar. Helal olsun M Fatih ve Kaan

  8. taner dedi ki:

    yok tamam öyle değilmiş pardon

  9. enes dedi ki:

    Kodlar çok güzel ama, son kodda tek tırnak ifadesnden sonraki harfi de büyük gösteriyor. Örneğin: “Ahmet’in oradaydım” cümlesini “Ahmet’İn oradaydım” şeklinde düzenliyor. Bunun çözümü yok mudur?

  10. mehmetunal dedi ki:

    Tebrik ve teşekkür ederim

  11. Gökhan Filiz dedi ki:

    Arkadaşlar ı karakterinde de sorun çıkartıyor. ILGAZ kelimesini => ilgaz yapıyor bende. Bu sorunun çözümü için kodu güncelledim.

    function ilkBuyuk($str) {
    $str = str_replace(‘i’, ‘İ’,$str);
    $str = str_replace(‘I’, ‘ı’,$str);
    return ltrim(mb_convert_case($str, MB_CASE_TITLE, ‘UTF-8’));
    }

  12. metin dedi ki:

    ellerinize sağlık işimi halletti.

  13. Birisi dedi ki:

    Metinde i̇ harfi (üstü çift noktalı i) sorunu ile karşılaşanlar aşağıdaki çözümü kullanabilirler.

    function fucwords($str) {
    return str_replace(‘i̇’, ‘i’, ltrim(mb_convert_case(str_replace(array(‘i’,’I’), array(‘İ’,’ı’), $str), MB_CASE_TITLE, ‘UTF-8’)));
    }

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorum onaylama sistemi etkin; yorumunuzun yayınlanması biraz zaman alabilir.