28 Kasım 2016 Pazartesi

PHP MySQL UTF8 Türkçe Karakter Hatası

PHP ile kodlama yaparken belkide en nefret edilen problemlerden biri de Turkce bozuk karakter sorunudur. Eminim ki bir cok insan belki de gunlerini harcayarak en sonunda saclarini baslarini yoluyor.

Asagida UTF8 (Turkce karakter bozukluklarini) gidermek icin gerekli olan butun asamalari listeledim. Daha da cok uzatmadan baslayalim.
1. Veritabani





[php]CREATE DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;[/php]



ve ya veritabani zaten var ise

[php]ALTER DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;

CREATE TABLE table_name(
...
)
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;[/php]

ve ya tablolar zaten olusturulmussa

[php]ALTER TABLE tbl_name
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;[/php]

2. Server PHP.ini

Server’da php.ini dosyasinda asagidaki degisiklikleri yapiniz

ilk once mbstring i aktif ediyoruz (Basindaki ; isareti kaldirarak)

[php]extension=php_mbstring.dll[/php]

ve ayni dosyada asagidaki degisiklikleri yapiyoruz

[php]mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.detect_order = auto
mbstring.substitute_character = none
default_charset = UTF-8[/php]

3. PHP fonskiyonlari

Eger scriptinizde asagidaki fonsiyonlari kullaniyorsaniz, UTF8 Turkce karakter destekleyen versiyonlari kullanmaniz gerekli.

Listemis soyle

[php]mail() -> mb_send_mail()
strlen() -> mb_strlen()
strpos() -> mb_strpos()
strrpos() -> mb_strrpos()
substr() -> mb_substr()
strtolower() -> mb_strtolower()
strtoupper() -> mb_strtoupper()
substr_count() -> mb_substr_count()
ereg() -> mb_ereg()
eregi() -> mb_eregi()
ereg_replace() -> mb_ereg_replace()
eregi_replace() -> mb_eregi_replace()
split() -> mb_split()
htmlentities($var) -> htmlentities($var, ENT_QUOTES, 'UTF-8')[/php]

4. Meta ve Headers

Websiteniz’in UTF8 Turkce karakter desteklemesi icin, asagidaki meta ve headerslari kullanmaniz gerekli.

HTML ise ( etiketi arasina)


[php]<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />[/php]

PHP ise (sayfanin en basina)


[php]header('Content-type: text/html; charset=UTF-8') ;[/php]

5. MySQL

Butun database islemlerinden once, yada sitenizin kullandigi bir config.php yada database.php var ise. DB seciminden hemen sonraki satirdan sonra.


[php]mysql_query("SET NAMES 'utf8'");[/php]

Genelde bunlarin hepsini yapmaniza gerek yok, bazen sadece birini yaparak sitenizdeki UTF8 Turkce karakter sorununu dozebilirsiniz.

0 yorum:

Yorum Gönder