Sayfalar

Translate Blog

php türkçe karakter etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
php türkçe karakter etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Aralık 2015 Pazartesi

Türkçe PHP Büyük Küçük Harf Çevirimi (Global UTF-8 Çözümü)

Her zmanaki gibi yine türkçe karakter problemi yaşıyorsunuz sorun yok hemen konuya girelim.
Phpde türkçe yazım sorunu, harf değişimi vs sorunlarına ilaç

$metin = "tıraş ağır"; //1 adet içinde Türkçe karakterler olan bir değişken
echo mb_strtolower($metin);


bunun sonucu bir kaç şekilde olmakla birlikte
TıRAş AğıR olabileceği gibi türkçe karakterler tamamen bozuk veya hiç gözükmeyebilir.


ÇÖZÜM
mb_strtoupper() kullanımı.

echo mb_strtolower("tıraş ağır","UTF-8");
veya

mb_internal_encoding("UTF-8");//ayarlarınızın olduğu ve her sayfaya yüğklenen bir dosyanız varsa ona bu kodu yazın. Global olarak utf-8i atarsanız artık sayfalarınızda alttaki kodu rahatlıkla kullanabilirsiniz.
echo mb_strtolower("tıraş ağır");


Sonuç TIRAŞ AĞIR ;)

24 Ocak 2015 Cumartesi

Php Kelimeleri Büyük Harf Yazın, Türkçe Karakter Sorunu Çözümü / Turkish Encoding Problem on PHP

Yıllardır php ile uğraşırım şu gıcık Türkçe karakter olayından oldum olası çekmişizdir. Mesela veritabanınızda veya sayfanızda küçüklü büyüklü yazılmış saçma sapan isimler var. Bunları strtoupper ile hemen büyük harfe çevirebilirsiniz sanıyorsunuz, ama ne yazık ki öle olmuyor.

strtoupper("aşık veysel derki");
kodu
AşıK VEYSEL DERKI

şeklinde ıiş gibi türkçe harflerin saçma sapan ekranınıza yazıldığında sinirlernmekte haklı olduğunuzu görür ve google da aramalara giriştiniz. Umarım burayı hemen bulmuşsunuzdur.

Sorunu mb_strtoupper gibi bir kodun var olmadığını görmeyerek üzülmemiş olduğunuzu varsayarak devam ediyorum. (substr türkçe karakterlerde sorun yaratırken mb_substr($kelime,2,4,'utf-8') sorunu çözmekte ve mb_ ön ekli bir çok fonksiyon utf-8 encoding yaparak sorunların üstesinden gelmekte. )

Çözüm 2 fonksiyondan geçiyor.

 
function metintodizi( $string ) { 
 return preg_split('/(?<!^)(?!$)/u', $string ); 
} 
function strto($metin){
 $k_harf = array("a","b","c","ç","d","e","f","g","ğ","h","ı","i","j","k","l","m","n","o","ö","p","r","s","ş","t","u","ü","v","y","z","q","w","x"," ");
 $b_harf = array("A","B","C","Ç","D","E","F","G","Ğ","H","I","İ","J","K","L","M","N","O","Ö","P","R","S","Ş","T","U","Ü","V","Y","Z","Q","W","X"," ");
 $kalan='';
 $metin = metintodizi($metin);
 for($m=0;$m<count($metin);$m++){
  if(!array_search($metin[$m],$k_harf)){
   $kalan .= $b_harf[array_search($metin[$m],$b_harf)].''; 
  }else{
   $kalan .= $b_harf[array_search($metin[$m],$k_harf)].'';    
  }
 }
 return $kalan;
}


echo strto("aŞık Veysel derKi");
AŞIK VEYSEL DERKİ


Gelelim nedir bu kodlar, ilk fonsiyonu bende bilmiyorum :D bir yerden aldım preg komutlarını oldum olası yapamam. konuya dönelim ilk fonksiyon metninizin her bir harfini diziye aktarıyor. Bunu yapan başka hazır komutlar da var diyenleri duyar gibiyim ama ne yazikki Türkçe konuşup Türkçe yazmakta ve inanmayacaksınız ama değişkenlerin içlerindeki verilerimiz bile Türkçe. Siz türkçe bir kelimeyi explode veya str_split veya mb_split gibi komutlarla dizi hali getirmeye çalışa dururken burdaki kodları kullanlara yapan arkadaşlar çoktan sorunlarına çözüm buldular bile.

Ne diyorduk, İlk fonksiyonla metninizi dizi haline getirdik harf harf. İkinci fonksiyonda ise Türkçe küçük ve büyük harflerimiz var dizi halinde. Dizi metnimizin her bir harfi tek tek taranıyor ve küçük harflerdeki dizi sırası alınıp, bu dizi sırasına karşılık gelen büyük harflerdeki dizi elemanı alınıp bir değişkene for döngüsündeki sıra ile alınıyor.

Böylelikle harf harf metniniz kontrol edilerek (sadece harfler bir de boşluk var) harfler küçükse büyük harfe çevriliyor.




Bu lanet probleme artık bir dur dediğimize göre işimize geri dönebiliriz.