Ucwords Türkçe Karakter Sorunu için çözüm

Bugünlerde geliştirmeye çalıştığım bir proje için sık sık php kullanır oldum. Kullanıcı metin girerken en azından adını bari düzgün yazsa bizi uğraştırmayacak fakat bu hususu düşünen php, ucwords diye bir fonksiyon geliştirmiş. Nitekim bizim alfabemiz pek düşünülmemiş bu konuda. Ne yaptık? Bizde Türkçe ucwords yaptık.

Nedir ne işe yarar?
ucwords fonksiyonu cümledeki kelimelerin ilk harflerini  büyütmeye yarar. Fakat cümlenizde türkçe karakterler varsa umrunda bile olmaz o karakterle hiç uğraşmaz. Biz uğraşıyoruz!

function trtekkelime($gelen)
{
$uzunluk=strlen($gelen);
$ilkharf = mb_substr($gelen,0,1,”UTF-8″);
$sonrakiharfler = mb_substr($gelen,1,$uzunluk,”UTF-8″);
$bir = array(‘ö’,’ç’,’i’,’ş’,’ğ’,’ü’);
$iki = array(‘Ö’,’Ç’,’İ’,’Ş’,’Ğ’,’Ü’);
$buyumus = str_replace($bir,$iki,$ilkharf);
return ucwords($buyumus).$sonrakiharfler;
}

“trtekkelime” fonksiyonumuz gelen kelimenin ilk harfini “ilkharf” adında bir değişkene alıyor, ilk harften sonra gelenleri de “sonrakiharfler” değişkenine alıyor. “str_replace” fonksiyonu ile de “bir” dizisinde belirttiğimiz karakterlerleri “ilkharf” değişkenimizde arayarak “iki” dizisinde aynı indeks numarasına sahip değer ile değiştiriyor. ucwords kullanmamızın sebebi ise her zaman Türkçe karakter gelmeyebilir, biz yine de büyütelim.

function trcumle($metin)
{
$bol = explode(” “,$metin);
foreach($bol as $bolen)
{
$gelen = $gelen.trtekkelime($bolen).” “;
}
return $gelen;
}

“trcumle” fonksiyonumuz ise gelen cümleyi önce kelime kelime ayırıp “bol” adında bir dizi yapıyor. Daha sonra ise her kelimeyi “trtekkelime” fonksiyonuna göndererek ilk harflerini büyütmeyi sağlıyor. Fonksiyondan gelen kelimeyi de “gelen” değişkenine ekleyerek bir sonraki kelime için tekrar dönüyor(foreach). Örnek dosya için buradan.

Örneğin :

$adsoyad = “çağlar şakalak”
echo trcumle($adsoyad);

Sonuç: Çağlar Şakalak

Not: Tüm Türkçe karakter sorunlarınız için öncelikle php kodlarınızın en başında “header(“content-type:text/html;charset=utf8″);” satırını eklemeyi unutmayınız.

Bir cevap yazın

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