Jan
30
2010

iconv ile karakter kodlama

BirçoÄŸumuz ya kullanmışızdır, ya da gerçekten çok ihtiyaç duyup çözüm aramışızdır. BaÅŸka bir karakter setinde olan metni diÄŸer bir karakter setine geçirmek. Bunun için çok kolay bir yöntem var “iconv”.
iconv phpnin karekter setleri arasında çevrim yapmaya olanak veren yararlı bir fonksiyonu.

1
string iconv(string $kodlamadan,string $kodlamaya,string $metin)

biçiminde kullanılır. iconv kullanırken dikkat edilmesi ve göz önünde bulundurulurması gereken en önemli nokta, karakter kümesinin karşılığını bulamadığı karakterde ne yapacağını belirtmektir.
Şöyle ki : iconv çevrim yaparken diÄŸer karakter setinde bulamayacağı karakterler vardır ( örneÄŸin Türkçe de μ δ benzeri karakterler yoktur), bu tür karakterlere denk geldiÄŸinde ön tanımlı olarak bu karakterden sonrasını es geçer ve Notice verir. Bunun önüne geçebilmek için çevrim yapılması istenen karakter setini belirtirken “//TRANSLIT” kelimesinin eklememiz gerekir. Böylece o karakter setinde olmayan, ama karşılığı olan karaktere çevrilir .
PHP kendi sitesinde verdiği örnek üzerinden gidersek :

1
2
3
4
5
6
$text = "'€' simgesi Euroya aittir";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

Çıktısı aşağıdaki gibi olacaktır

Original : ‘€’ simgesi Euroya aittir
TRANSLIT : ‘EUR’ simgesi Euroya aittir
IGNORE : ” simgesi Euroya aittir
Notice: iconv(): Detected an illegal character in input string in .\index.php on line 6
Plain : ‘
Notice: iconv(): Detected an illegal character in input string in .\index.php on line 7

iconv çok yararlı bir fonksiyondur, karakter setleri arasında çevrim yapmak istediğinizde işinizi oldukça kolaylaştıracak bir fonksiyondur.
Elimden geldiğince kullanımına dair birşeyler paylaşmak istedim. işinize yaraması umudu ile, hoşça kalın.

16 Yorum »

  • Samet Ç. says:

    Yazı için teşekkürler. İşime yarayacağını düşünüyorum.

  • Ersin says:

    Rica ederim.

  • Serkan says:

    Merhab bu fonksiyon ile bir derdim var. yardımcı olabilirseniz çok sevinecem. Sitemde bi modül var rusça karakterlere uygun hazırlanmış. ancak türkçe karakterlerde problem çıkarıyor.

    gerekli dosyalar altta. ilk dosyadaki bölümde sorun sanırım.
    http://www.film-izleme.net/gerek.txt
    http://www.film-izleme.net/hepsi.txt

  • Ersin says:

    Problemi anlamadım. Nedir yapmak isteyip de yapamadığınız. Verdiğiniz kodları ne yapmak istediğinizi anlamadığım için incelemedim.

  • Serkan says:

    Öncelikle teşekkürler. Yukarıda ki sitemin anasayfasına bakarsanız googledan gelen aramalar hangi sayfama hangi kelime ile geliyorsa bunu link yapıp anasayfada sağ alt bölüme link veren bi dosyanın kodları (seo için).yalnız sitemde sağ altta görebileceğiniz gibi türkçe karakterli aramalarda link kelimesi eksik çıkıyor. bende gereken php dosyasını http://www.film-izleme.net/hepsi.txt da gönderdim. iconv fonksiyonu ile olduğunu düşündüm. Türkçe karakter problemini giderebilirmisiniz zahmet olmazsa. Teşekkürler.

  • Ersin says:

    Sanırım yukarıda bahsettiğim //TRANSLIT kelimesini ekler iseniz probleminiz çözülecek. Buna yukarıda değinmiştim. Örneğe bakarak deneyin isterseniz.

  • Serkan says:

    Teşekkürler.Dediğinizi bir kaç farklı şekilde denedim olmadı.Teşekkürler zaman ayırdığınız için.

  • Serkan says:

    @iconv(“utf-8″, “windows-1251//TRANSLIT”, $request);
    bu şekilde kullandım.türkçe karakterleri ingilizceye çevirdi. Oda iyi bir şey. teşekkürler tekrar.

  • Ersin says:

    $request = @iconv(“utf-8″, “windows-1251″, $request);

    satırını şu şekilde değiştirin

    $request = @iconv(“utf-8″, “ISO-8859-9//TRANSLIT”, $request);

    Bu sorununuzu çözecektir.

  • Serkan says:

    onu denemiştim. bir daha denedim.hatayı size göndermek için.eğer düzelebilecek bir şeyse diye. verdiği hata şu.

    Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin5_turkish_ci,COERCIBLE) for operation ‘=’

  • Ersin says:

    Ama bu hata iconv den değil MySQL tablonuzun karakter setinden kaynaklanıyor.
    Tablolarınızda latin5_turkish_ci yerine utf8_general_ci , sitenizin karakter setinde ise ISO-8859-9 yerine utf8 kullanırsanız problemleriniz çözülür.
    Ayrıca iconv kullanmak zorunda da kalmazsınız.

  • Serkan says:

    Teşekkürler tekrar.onu yapmak çok zor olacakır benim için.İyi çalışmalar vaktinizi aldım.

  • Uygar says:

    güzel bir anlatım olmuş. teşekkürler..

  • kahraman karafil says:

    teşekkürler sayesinizde 2 gündür aradığım kodu buldum.

  • cakkacukka says:

    hacı manueli türkçeye çevirmişsin. çöp blog. :\

  • Ersin says:

    Siz daha iyisini yapın, biz sizi takip edelim.

RSS feed for comments on this post.


Yorum yaz

Powered by WordPress | conserio | xoppla | TheBuckmaker