Türkçe Karakter Destekli Ucwords() Fonksiyonu
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 ?>
Bu sayfa 1.750 kez görüntülendi.
Tebrik ve teşekkür ederim
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”);
$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 🙂
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ı.
< ?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
Güzel bir paylaşım ve çalışıyor. Teşekkürler…
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…
M Fatih’in kodu 10 numara… tekerleği tekrar icat etmeye gerek yok… ucwords_tr fonksiyonu ciddi kod kiriliği…
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’));
}
kaynak koddan incelediğimde bu return ltrim… fonksiyonu çıktı olarak tırnak işareti koyuyor başına dikkat ettiniz mi?
Dediğin gibi büyük I larda sorun oluyor diğer şekilde. Bu hali enfes… Eline sağlık.
Teşekkürler. İnternette arama yaparken denk geldim 🙂
Budur arkadaşlar. Helal olsun M Fatih ve Kaan
yok tamam öyle değilmiş pardon
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?
Tebrik ve teşekkür ederim
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’));
}
ellerinize sağlık işimi halletti.
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’)));
}