Sayfalar

Translate Blog

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.

21 Ocak 2015 Çarşamba

Php ile Basit Takvim Uygulaması İndirin / Download Free Php Simple Calendar

Karşılaşabileceğiniz en basit takvim uygulamalarından birisi olduğunu düşünüyorum. Tek sayfa kod ile oluşturulmuş bir Türkçe takvim uygulamasıdır. Görüntüsü aşağıdadır.

İndirmek için tıklayın.


Yakında google takvim benzeri bir hale  yani tarihlerin içlerine tıklayarak etkinlikler eklenebilir hale getirilmesi planlanıyor.

20 Ocak 2015 Salı

Php İle Ayın Günlerini Takvim Gibi Listeleme / List days of month like a calender

Aşağıdaki kod bulunduğunuz aydaki takvimi size vermektedir. Takvim tarihleri barındırır. Gelişrirsem paylaşacağım.

//şu anki zamana göre bulunulan ayın ilk günü sayısal olarak alınır
$month_start = strtotime('first day of this month', time());

//bu ayın kaç gün çektiği sayısal bilgisi (30) cal_days_in_month(CAL_GREGORIAN, ay, yıl)
$aydaki_gun = cal_days_in_month(CAL_GREGORIAN, date('m', $month_start), date('Y', $month_start));

//date('N',tarih) bu bulunduğu haftanın kaçıncı gününe denk geldiği bilgisidir. Tarih pazar ise 1 pazartesi 2 salı 3 vb döner. Pazaartesi ilk gün olduğu için döngüyü 1den (pazartesi) başlattım. ayın ilk tarihi haftanın hangi gününden başlayacağı if ile belirlenmektedir. date('N', $month_start)==$i ye eşit olana kadar tarih yazılmaz yerine boş alanlar [00-00-0000] ekleniyor. Eşit olunca tarih yazılır ve break; ile for döngüsü kırılır.

for($i=1;$i<8;$i++){
if( date('N', $month_start)==$i){
$ilkhafta=$i;
break;
}else{
echo '<span style="text-decoration: line-through;">[00-00-0000]</span>     ';
}
}

//ayın kalan günleri de sütun sayısı 7 olana kadar yanyana echo ile yazdırılmakta. ilkhafta değişkeni ilk haftadaki günün kaçıncı gün olduğunu tutuyordu üstteki döngüde. bu sayının arttılıldığını görüyorsunuz her seferinde. Yani gün gün 1er artmakta. Ve 7ye her tam bölünmesinde bir alt satıra <br> tagı eklenerek geçilir. Her bir gün J ile sayılır ve Aydaki gün sayısına eşit olduğu zaman do while döngüsünden çıkılır.

$j=0;
do{
echo '['.date('d-m-Y', strtotime('+'.$j.' day', strtotime(date('d-m-Y', $month_start)))).']     ';
$j++;
if($ilkhafta % 7 == 0) echo '<br>';
$ilkhafta++;
}while($j<$aydaki_gun)




Kodların tamamı aşağıdadır


$month_start = strtotime('first day of this month', time());
$aydaki_gun = cal_days_in_month(CAL_GREGORIAN, date('m', $month_start), date('Y', $month_start));
for($i=1;$i<8;$i++){
if( date('N', $month_start)==$i){
$ilkhafta=$i;
break;
}else{
echo '<span style="text-decoration: line-through;">[00-00-0000]</span> ';
}
}
$j=0;
do{
echo '['.date('d-m-Y', strtotime('+'.$j.' day', strtotime(date('d-m-Y', $month_start)))).'] ';
$j++;
if($ilkhafta % 7 == 0) echo '<br>';
$ilkhafta++;
}while($j<$aydaki_gun)