Kategoriler
Kodlama

Türkçe Karakter Destekli Ucwords() (PHP)

PHP UTF8 de Ucwords() gibi bu tür çevirilerde (İ-ı) dönüşümlerinde problem yaşanmaktadır. Çözmek için bunu kullanabilirsiniz.

PHP UTF8 de Ucwords gibi bu tür çevirilerde yalnızca i -> İ dönüşümünde problem yaşanmaktadır, tabii ikisi de I’dan ı’ya ve i’den İ’ye. Bunu çözmek için aşağıdaki fonksiyonu kullanabilirsiniz.

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

Veya daha güzeli:

/* Türkçe Destekli İlk Harf Büyük Diğerleri Küçük */
function ilkBuyukTR($str){
return ltrim(mb_convert_case(str_replace('i', 'İ',mb_strtolower($str)), MB_CASE_TITLE, 'UTF-8'));
}

İkincisi öncelikle metnin tümünü küçültüyor.

Ve en iyisi:

/* Türkçe Destekli İlk Harf Büyük Diğerleri Küçük Final */
function ucwords_tr($str){
return ltrim(mb_convert_case(str_replace(array('i','I'), array('İ','ı'),mb_strtolower($str)), MB_CASE_TITLE, 'UTF-8'));
}

Kaynak: https://www.php.net/manual/tr/function.mb-convert-case.php

Bu arada PHP8 çıktı, yayında. Daha iyi performans demiş ama henüz deneyemedim.

PHP 8.0, PHP dili için önemli bir güncellemedir.
Optimizasyonlar ve yeni özellikler: Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.

https://www.php.net/releases/8.0/en.php

Bu arada bazen yukarıdaki kod ile çevirimde şapkalı i harfi sorunu olabiliyormuş, bu şekilde bir sorunla karşılaşırsanız testlerime göre final en iyi performanslı çalışan kod aşağıdaki gibi:

function ilkBuyukTR($str){
	$str = mb_strtolower($str);
return str_replace('i̇','i',ltrim(mb_convert_case(str_replace(array('i','I'),array('İ','ı'),$str),MB_CASE_TITLE,'UTF-8')));
}

Kolay gelsin.