Cuma, 7 Ağustos 2009

Türkçe Karekterler ile Metin İşlemleri

 

Türkçe kelimeler, büyük küçük harf çevriminin yapılacağı yerlerde PHP fonksiyonları sıkıntıya sokar programcıları. PHP dilinin orijinalinin ingilizceye hizmet vermesi sebebiyle, içinde türkçe harfler geçen kelimelerin işlenmesi içn mutlaka kendimizin yeni fonksiyonlar, sınıflar yazmamızı gerektirir.

İzzet Emre Erkan tarafından geliştirilen strtrfunc isimli sınıf, değişik opsiyonlar ile bu sıkıntıyı gidermek için yazılmıştır. Strtrfunc sınıfı ile, bütün harfleri küçük olarak geşen bir türkçe metini, bütün harflerini büyütmek (ya da tam tersi), ilk harflerini büyütmek, içinde geçen özel isimler ayrı kalmak kaydıyla tüm ilk harflerini büyütmek mümkün.

Bu sınıfın CodeIgniter için çalışır hale getirirsek, yaptığımı applicaiton/libraries dizini altına bu dosyamızı strtrfunc.php ismi ile yüklemek. Daha sonra bu dosyanın içine CodeIgniter Log dosyasına sınıfın yüklendiğini bildirmek amacı ile 20. satırını eklemek.

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/*
* Sınıf        : strtrfunc
*
* @Geliştirici : İzzet Emre Erkan <kara@karalamalar.net>, <eerkan @graf2.com>
* URL          : http://www.karalamalar.net
*       
* @Versiyon    : 1.0
* Tarih        : 09.01.2007
* Amaç         : Metin şekillendirme işlemlerinin Türkçe karakterler ile uyumlu bir şekilde yapılması
*/
 
class Strtrfunc 
{
    private $kHarf; // Türkçe karakterler (Küçük)
    private $bHarf; // Türkçe karakterler (Büyük)
   
    function __construct() {
  log_message('debug', 'Strtrfunc class initialized.');//CI log dosyasına bildiriyoruz. 
        $this->kHarf = array("i","ı","ş","ğ","ö","ü","ç");
        $this->bHarf = array("İ","I","Ş","Ğ","Ö","Ü","Ç");
    }
    /*
     * Türkçe karakterleri dikkate alarak kelimenin tüm harflerini büyütür.
     *
     * @param   string  $metin
     * @return  string
     */
    function buyut($metin) {
        return strtoupper(str_replace($this->kHarf,$this->bHarf,$metin));
    }
    /*
     * Türkçe karakterleri dikkate alarak kelimenin tüm harflerini küçültür.
     *
     * @param   string  $metin
     * @return  string
     */
    function kucult($metin) {
        return strtolower(str_replace($this->bHarf,$this->kHarf,$metin));
    }
    /*
     * Türkçe karakterleri dikkate alarak, parametre olarak gönderilen kelimeyi ilk harfi büyük,
     * geriye kalan harfleri küçük hale getirir. (Cümleler için ihbc fonksiyonunu kullanın)
     * ihb = ilk harf büyük
     *
     * @param   string  $metin
     * @return  string
     */
    function ihb($metin) {
        $metin = $this->kucult($metin);
        return strtoupper($this->buyut(substr($metin,0,1))).substr($metin,1);
    }
    /*
     * Bir cümlenin ilk harfini ($tumu = false) ya da bütün kelimelerinin ilk harflerini ($tumu = true) büyüten fonksiyon
     * Kelimelerin ilk harflerini büyütürken ihb fonksiyonunu kullanır. Tümü büyük harften oluşan kelimeleri pas geçer.
     * (Örneğin AIDS, TBMM vb)
     * ihbc = ilk harf büyük cümle
     *
     * @param   string  $metin
     * @param   boolean        $tumu
     * @param   boolean      $bKelime
     * @return  metin
     */
    function ihbc($metin, $tumu = false) {
        $kelimeler = explode(" ", $metin);
        $metin = "";
        if(count($kelimeler)>1) {
            $i=0;
            foreach($kelimeler as $kelime) {
                if($kelime == $this->buyut($kelime)) $metin .= $kelime." ";
                else {
                    if($i <1) $metin .= $this->ihb($kelime)." ";
                    else $metin .= ($tumu?$this->ihb($kelime):$kelime)." ";
                    $i++;
                }
            }
            $metin = substr($metin,0,-1);
        }
        else {
            if($kelimeler[0] == $this->buyut($kelimeler[0])) $metin .= $kelimeler[0];
            else $metin = $this->ihb($kelimeler[0]);
        }
        return $metin;
    }
}

Kütüphanemizi yüklemek için applications/controller dizini altına cevir.php isimli controller dosyamızı yükleyelim. Bu dosyanın içeriği de aşağıdaki gibidir:

class Cevir extends Controller {

 function Cevir()
 {
  parent::Controller(); 
 }
 
 function index()
 {
 
  $this->load->library('strtrfunc');

  $data['buyut']= $this->strtrfunc->buyut("belki ağlamıyordu ama ne kadar saklamaya çalışsa da üzüntüsü gözlerinden okunabiliyordu.");
  $data['kucult']= $this->strtrfunc->kucult("BELKİ AĞLAMIYORDU AMA NE KADAR SAKLAMAYA ÇALIŞSA DA ÜZÜNTÜSÜ GÖZLERİNDEN OKUNABİLİYORDU.");
  $data['ihb']= $this->strtrfunc->ihb("belki ağlamıyordu");
  $data['ihbc']= $this->strtrfunc->ihbc("belki ağlamıyordu ama ne kadar saklamaya çalışsa da ÜZÜNTÜSÜ gözlerinden okunabiliyordu.");
  $data['ihbc2']= $this->strtrfunc->ihbc("belki ağlamıyordu ama ne kadar saklamaya çalışsa da ÜZÜNTÜSÜ gözlerinden okunabiliyordu.",true);  
  
  $this->load->view("cevir_view",$data);
  
 }
}

Kodlardan da takip ettiğiniz üzere, kütüphanemizi yükledikten sonra açıklamaları sınıfın içinde bulunan fonksiyonları çalıştırıyoruz. Sonuçları da applicaiton/views dizini altında bulunan cevir_view.php dosyamız ile ekrana yazdırıyoruz. Cevir_view.php dosyamızın içeriği aşağıdadır:


<?=$buyut;?>
<?=$kucult;?>
<?=$ihb;?>
<?=$ihbc;?>
<?=$ihbc2;?>


Çıkan ekran sonucu ise aşağıdadır:

BELKİ AĞLAMIYORDU AMA NE KADAR SAKLAMAYA ÇALIŞSA DA ÜZÜNTÜSÜ GÖZLERİNDEN OKUNABİLİYORDU.

belki ağlamıyordu ama ne kadar saklamaya çalışsa da üzüntüsü gözlerinden okunabiliyordu.

Belki ağlamıyordu

Belki ağlamıyordu ama ne kadar saklamaya çalışsa da ÜZÜNTÜSÜ gözlerinden okunabiliyordu.

Belki Ağlamıyordu Ama Ne Kadar Saklamaya Çalışsa Da ÜZÜNTÜSÜ Gözlerinden Okunabiliyordu.

Yorumlar

İhtiyaca yönelik bi yazı olmuş, azönce karakterleri küçültürken, büyük i yi küçültememiştim ki ,bu yazıyı buldum.
çok teşekkür ederim.

Yorum Ekle