Codeigniter url_title Türkçe Karakter Problemi

Codeigniter url_title Türkçe Karakter Problemi Codeigniter ile çalışırken yazı başlıklarımızdan arama motoru dostu url adresleri elde etmek için kullandığımız url_title fonksiyonu malesef Türkçe karakterlerimizi de yutuyor.

Bu sorunu çözmek için aplication/helpers klasöründe MY_url_helper.php isimli bir dosya oluşturarak aşağıdaki fonksiyonu içine yazmanız yeterli. Bu işlemi yaptıktan sonra url_title fonksiyonu Türkçe karakterleri düzgün bir şekilde çevirecektir.

function url_title($str, $separator = 'dash', $lowercase = FALSE)
{
    if ($separator == 'dash')
    {
        $search = '_';
        $replace = '-';
    }
    else
    {
        $search = '-';
        $replace = '_';
    }

    $trans = array(
        '&\#\d+?;' => '',
        '&\S+?;' => '',
        '\s+' => $replace,
        '\.' => $replace,
        '[^a-z0-9\-_]' => '',
        $replace . '+' => $replace,
        $replace . '$' => $replace,
        '^' . $replace => $replace,
        '\.+$' => ''
    );

    $search_tr = array('ı', 'İ', 'Ğ', 'ğ', 'Ü', 'ü', 'Ş', 'ş', 'Ö', 'ö', 'Ç', 'ç');
    $replace_tr = array('i', 'I', 'G', 'g', 'U', 'u', 'S', 's', 'O', 'o', 'C', 'c');
    $str = str_replace($search_tr, $replace_tr, $str);

    $str = strip_tags($str);

    foreach ($trans as $key => $val)
    {
        $str = preg_replace("#" . $key . "#i", $val, $str);
    }

    if ($lowercase === TRUE)
    {
        $str = strtolower($str);
    }

    return trim(stripslashes($str));
}
Bu yazı en son 18 Şubat 2011 tarihinde düzenlenmiştir ve güncelliğini yitirmiş olabilir.

  • Onur Değerli

    Yararlı bir yazı.
    Elinize sağlık

  • Serkan

    Hımm hiç dikkat etmemiştim. Paylaştığın iyi oldu teşekkürler.

  • Nurettin

    Ellerine sağlık

  • onurtez

    ellerıne saglık oncelıkle. daha oncekı suurmlerde ıse yaradı ama cı 2.0 da denedımde turkce karakterlerde degısme olmadı nasıl duzelte bılırız?

  • Musa

    Codeigniter'ın kendi içindei "url" ve "text" helper'ları ilede daha kolay yapabilirsiniz.

    echo url_title(convert_accented_characters('türkçe karakterli başlık'))
    ekranda "turkce-karakterli-baslik" yazar.

    kolay gelsin

  • Mustafa Navruz

    @onurtez 2.0 versiyonu ile bu blogda dahil bir çok proje yaptım. Herhangi bir problem olmadı.
    @Musa convert_accented_characters ile ü ve ö harflerinde problem oluşacaktır. Çünkü turkce değil tuerkce yazacaktır.

  • Musa

    bu problemi application\config\foreign_chars.php dosyasını açıp o karakterleri düzeltebilirsiniz.

    Sıfırdan yapmak yerine varolanı düzeltip kullanmak daha mâkul bence.

  • Kodmanyagha

    doğrusunu söylemek gerekirse bir anda tüm dertlerimi yok etti :)

  • kemal

    bazen sona nedenini bilmediğim bir tire koyuyor bunu nasıl engelleyebilirim teşekkürler

  • Mustafa Navruz

    Fonksiyona gönderdiğiniz $str parametresinin sonunda boşluk (" ") olabilir.
    $str = strip_tags($str) satırını $str = trim(strip_tags($str)); şeklinde değiştirirseniz sorununuz çözülecektir.

  • kemal

    rstrtrim($baslik_seo_url,"-"); sondaki bazen çıkan gereksiz tireyi kaldırmak için böyle kullandım. kolay gelsin

  • Kemal

    eywallah kardeşim

  • özgür

    bravo... teşekkürler :)

blog comments powered by Disqus

© Mustafa Navruz 2011 0.0171 sn.

^ Başa Dön