Ağu
9

Php’de UTF-8 Türkçe karakter sorunu ve çözümü

Php’de utf-8 ile  kod yazarken türkçe karakter sorunu ile karşılaşırsanız, aşağıdaki adımları uygulayarak sorunloarı çözebilirsiniz.

1-Veritabanında

Veritabanınızı UTF-8 yaparsanız, Veritabanından veri çekerken veya ekleme işlemi yaparken türkçe karkater problemi yaşarsınız. Bunun çözümü  için aşağıdaki kod parçasını veritabanına bağlantı yaptığınız yerin hemen altına yazmaktır.


mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");

Eğer siz Php’nin PDO kütüphanesini kullanıyorsanız türkçe karakter sorununu çözmek için aşağıdaki kodu kullanabilirsiniz.

$DBH = new PDO("mysql:host=localhost;dbname=dbname", 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

2- Kelimelerin ilk harflerini büyük yapmaya çalıştığınızda:

Mesela “enes pekkaya” sözcüğünün ilk baş harflerini strtoupper ile büyültmeyew çalıştığınızda türkçe karakter sorunu ile karşılaşırsınız. Çözümü ise;


mb_convert_case($deger, MB_CASE_TITLE, "UTF-8");

Yukarıdaki örnekte “MB_CASE_TITLE” kısmı kelimelerin ilk harflerini büyük yapar. Eğer siz hepsini küçültmek isterseniz “MB_CASE_LOWER”, büyültmek için “MB_CASE_UPPER” kelimesini kullanabilirsiniz. Böylelikle türkçe karakter sorunundan kurtulursunuz.

Eğer sizin karakter unicodunuz “ISO-8859-9” ise ve kelimelerin ilk harflerini büyük yapmak istiyorsanız,  aşağıdaki classın işinize yarayacağından eminim.


class StringCases
{
 public function strToUpper($value)
 {
 $value = str_replace("ç", "Ç", $value);
 $value = str_replace("ğ", "Ğ", $value);
 $value = str_replace("ı", "I", $value);
 $value = str_replace("i", "İ", $value);
 $value = str_replace("ö", "Ö", $value);
 $value = str_replace("ü", "Ü", $value);
 $value = str_replace("ş", "Ş", $value);

 $value = strtoupper($value);
 $value = trim($value);

 return $value;
 }

 public function strToLower($value)
 {
 $value = str_replace("Ç", "ç", $value);
 $value = str_replace("Ğ", "ğ", $value);
 $value = str_replace("I", "ı", $value);
 $value = str_replace("İ", "i", $value);
 $value = str_replace("Ö", "ö", $value);
 $value = str_replace("Ü", "ü", $value);
 $value = str_replace("Ş", "ş", $value);

 $value = strtolower($value);
 $value = trim($value);

 return $value;
 }

 public function uCaseWords($value)

{
$value = $this->strToLower($value);

$value = split(" ", trim($value));

 $value_tr = "";

 for($x=0; $x < count($value); $x++)
 {
 $value_first = substr($value[$x], 0, 1);
 $value_last = substr($value[$x], 1);
 $value_first = $this->strToUpper($value_first);

 $value_tr .= $value_first . $value_last ." ";
 }

 $value_tr = trim($value_tr);

 return $value_tr;
 }

}

Herkesin işine yarayacağından eminim.




10 yorum bulunmaktadır - “Php’de UTF-8 Türkçe karakter sorunu ve çözümü”

  • Selcuk Yasar 10 Kasım 2010, 22:48

    Çok teşekkürler yazınız çok yardımcı oldu.

  • ismail hakkı 13 Ocak 2011, 20:06

    php nin pdo kütüphanesini kullanmaya yeni başladım, türkçe karakter problemi yaşıyordum ki google dan sitenizi buldum, emeğinize sağlık, teşekkürler.

  • Nimet Demir 11 Mart 2011, 03:19

    Ne kadar teşekkür etsem az. PHPBB formunu kullanıyordum.bir türlü sorun çözülmedi.sonunda
    $sql=”Select * from phpbb_forums order by forum_id;”;
    mysql_query(“SET NAMES ‘utf8′”);
    mysql_query(“SET CHARACTER SET utf8”);
    mysql_query(“SET COLLATION_CONNECTION = ‘utf8_turkish_ci'”);
    $sorgu=@mysql_query($sql,$baglanti);

    şeklinde yaptım.Sorun kalmadı. Tekrar teşekkürler.Allah seni her daim sağlıklı ve mutlu etsin.

  • Enes Pekkaya 11 Mart 2011, 10:23

    işinize yaradıysa ne mutlu bana 🙂 İyi çalışmalar…

  • yasmin 07 Ocak 2012, 15:03

    gerçekten çok çok teşekkürler çok işe yaradı.Günlerdir uğraşıyorduk sonunda çözüldü.Biz latin5 ile yapmıştık ama html sayfalarımız utf idi. Sanırım çakışıyordu. Bu kesin çözüm ^^

  • Kemal 07 Mart 2012, 13:48

    Teşekkürler

  • Ahmet ARDUÇ 14 Ağustos 2012, 13:21

    Merhaba,

    localde bir proje üzerinde çalışıyorum. Notepad++ kullanıyorum. UTF-8 BOM’suz kodlama sistemini kullanıyorum. Dosyalarımda, klasörlerimde, MySQL’deki tablolarda ve php dosyalarının hiçbirinde Türkçe karakter problemi yaşamıyorum. Fakat enteresan başka bir durum yaşıyorum:
    localhost’ta A isimli bir klasörüm var. İçinde mesela B, C, Ç isimlerinde klasörler var. B, C ve Ç klasörlerinde, isimleri sayılardan oluşan png dosyaları var. Ç klasörünün isminde Türkçe’ye özel ı, ş, ç gibi harfler var diye bu klasördeki resimleri okuyamıyor. Fakat, B ve C klasörlerinin isimlerinde Türkçe’ye özel harfler olmadığından, o klasörlerdeki resimleri okuyabiliyor.
    Sorunu nasıl çözebiliriz?

  • Enes Pekkaya 16 Ağustos 2012, 08:13

    Merhaba, Aslında bu sorun kodsal sıkıntı değildir. Daha doğrusu siz kullanmış olduğunuz editörünüzle klasörleri oluşturuyorsanız, sıkıntı şu şekilde olmaktadır. Editöre “ö” harfi yazdığınızda editörün encoding latin-5 i desteklemiyor ise “ö” harfi yerine atıyorum “!?” şeklinde atmasıdır. Tabi bundan dolayıda klasörü bulumamıştır. Editörünüzde ilgili ayarlamaları yaparsanız sorun çözülecektir.

  • Ozan Tüzel 08 Mart 2013, 17:39

    Merhaba,
    yazı için teşekkürler.

    Bende ı harfleri sorunlu görünüyordu.
    PDO için yazılan çözümü uyguladım ama bu sefer de ı harfleri kayboldu.
    Bir öneriniz var mıdır?

    Teşekkürler

  • Kadir 02 Aralık 2017, 16:26

    en az 6-7 tane site gezdim. Tüm karakterleri küçültmek için hepsinde karakter hatası verdi. $deger = mb_convert_case($deger, MB_CASE_LOWER, “UTF-8”); ile hepsini küçülttüm. Teşekkürler.

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Haftanın Özlü Sözü

Akıllı bir adam yalnız kendi tecrübelerinden, çok akıllı bir adam başkalarının da tecrübelerinden yararlanır. (Çin Atasözü)

Bağlantılar

Arşivler