30 Jan

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.

21 thoughts on “iconv ile karakter kodlama

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

  2. Ö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.

  3. 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.

  4. @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.

  5. $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.

  6. 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 ‘=’

  7. 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.

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

  9. Karakter kodlamaları arasındaki çevrimi yanlış yapıyor olabilirsiniz. Örneğin çevireceğiniz krakter seti ISO-8859-1 dir, siz ISO-8859-3 yazarsanız giriş karakter setine “iconv(‘ISO-8859-3′,’UTF8’,$string)”, çevrilecek olan karakter setinde çeviremediği karakterler için ? işareti ekleyecek.

  10. Teşekkürler ? karakteri için str_replace ile çözüm gurubetinden kurtardığınız için

Comments are closed.