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

Bağlantılar

Arşivler