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ü”
Yorum Yapın
Etiketler
Son Yazılar
- Uzak sunucuda bulunan android cihaz ile otomasyon
- Mac’ de çoklu Java versiyon yönetimi
- İş yarar docker komutları
- Eski branchlerin git’ den silinmesi
- Kubernetes Süresi Dolmuş Sertifikaları Yenilemek
Son Yorumlar
- Hosting koşuşturması için
- Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler için
- Visual Studio Toolbox’a component(bileşen) eklenmesi için
- “File is too large for destination file system” hatasını gidermek için
- Php’de UTF-8 Türkçe karakter sorunu ve çözümü için
Bağlantılar
Arşivler
- Kasım 2021
- Eylül 2021
- Ağustos 2021
- Temmuz 2021
- Aralık 2020
- Kasım 2020
- Ekim 2020
- Eylül 2020
- Kasım 2017
- Mayıs 2017
- Mart 2017
- Şubat 2017
- Ocak 2017
- Nisan 2015
- Aralık 2014
- Mayıs 2014
- Eylül 2013
- Haziran 2013
- Şubat 2013
- Kasım 2012
- Ekim 2012
- Eylül 2012
- Mart 2012
- Şubat 2012
- Ocak 2012
- Aralık 2011
- Kasım 2011
- Ekim 2011
- Eylül 2011
- Temmuz 2011
- Haziran 2011
- Mayıs 2011
- Mart 2011
- Ocak 2011
- Aralık 2010
- Kasım 2010
- Ekim 2010
- Eylül 2010
- Ağustos 2010
- Temmuz 2010
- Haziran 2010
- Mayıs 2010
- Nisan 2010
- Mart 2010
- Şubat 2010
- Ocak 2010
- Haziran 2009
- Mayıs 2009
- Nisan 2009
- Mart 2009
Çok teşekkürler yazınız çok yardımcı oldu.
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.
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.
işinize yaradıysa ne mutlu bana 🙂 İyi çalışmalar…
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 ^^
Teşekkürler
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?
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.
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
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.