Türkçe Karakter Destekli Ucwords() Fonksiyonu

20
Bu sayfa 916 kez görüntülendi.
php

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 916 kez görüntülendi.

20 YORUMLAR

  1. 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”);


        • < ?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.

          • 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

  2. 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…

  3. 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’));
    }

  4. 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?

  5. 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’));
    }

  6. 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’)));
    }

CEVAP VER

Please enter your comment!
Please enter your name here

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