IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   PHP (https://www.ircforumlari.net/php/)
-   -   charset & encoding problemleri (https://www.ircforumlari.net/php/670972-charset-amp-encoding-problemleri.html)

hAte 15 Ocak 2015 06:45

charset & encoding problemleri
 
karakter set veya türkçe problemi ile sanırım herkes karşılaştı
forumda onlarca defa çözülmesine(?) rağmen bu konu hakkında hala yeni sorular geliyor
ya çözümünü anlatamıyoruz, ya da yeterli değil

karakterlerin hem düzgün görülmesi için hemde veritabanında doğru depolama yapmak için biraz
detaylı anlatmaya çalışacağım

1) öncelikle yazdığınız dosyalarının, kullandığınız editörün encoding değerine göre iç karakter
kodlama (internal encoding) değeri vardır
çoğu editör bu değeri işletim sisteminden locale çevre değişkeninine bakarak seçer. windows
sistemlerde genellikle windows-1254 veya iso-8859-9 'dur.
bu dosyanın ( html , css , php , js .. ) içindeki text'in hangi encoding ile yazıldığını gösterir
2) http sunucusundan gönderilen çıktılar için default encoding değeri vardır, bu değer header
olarak gönderilir. sayfayı görüntüleyen kişinin kullandığı tarayıcı ( ie , ff .. ) body kısmını
parse ederken bu charset değerine göre işlem yapar. eğer bu header bilgisi bulunamassa bazı
tarayıcılar body içerisinde encoding bilgisi taşıyan meta etiketini arar.
bu değeri .htaccess ile :
ÇIKTI: AddCharset utf-8 .js .php .css .html
veya php'de header fonksiyonunu kullanarak
PHP: header('Content-Type: text/plain; charset=utf-8');
değiştirebilirsiniz
bu kısım çok önemlidir, zira haricindeki şeyleri doğru yapmanız bile karakterlerin hatalı
gözükmesine neden olabilir
ayrıca kullanıcı post / get gibi isteklerde sunucuya gönderdiği verileri bu encoding değerinde
gönderir

3) mysql 4.1 ve üst versiyon sunucuda karakter set ile ilgili değişkenler;
- server character set & collation
eğer sunucu yönetimi ile işiniz yoksa bu kısmı atlayabilirsiniz
mysql'i kurmadan önce configure parametresi olarak
KABUK: bash#./configure --with-charset=utf8 --with-collation=utf8_unicode_ci
veya mysql'i başlatırken
KABUK: bash#mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

- database character set & collation
SQL: create database db character set utf8 collate utf8_unicode_ci;
eğer belirtmesseniz server değişkenleri kullanılacaktır

- table character set & collation
SQL: create table test(
c1 int(5) unsigned
) character set utf8 collate utf8_unicode_ci;eğer belirtmesseniz database değişkenleri kullanılacaktır

- column character set & sollation
SQL: create table test(
c1 text character set utf8 collate utf8_unicode_ci
);
eğer belirtmesseniz table değişkenleri kullanılacaktır

- connection character set & collation
character_set_client , character_set_results , character_set_connection, collation_connection
PHP: $mysqli->set_charset('utf8');
// veya
$mysqli->query('set names "utf8" collate "utf8_unicode_ci"');


PHP:
$m = new mysqli('localhost','user','pass','db');

//$m->set_charset('utf8');

$m->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");

$query = $m->query('show variables like "char%"');

if ($query) {
while ($row = $query->fetch_row()) {
echo $row[0].' => '.$row[1]."\n";
}
}

?>
ÇIKTI: character_set_client => utf8
character_set_connection => utf8
character_set_database => utf8
character_set_filesystem => binary
character_set_results => utf8
character_set_server => latin1
character_set_system => utf8
--
collation_connection => utf8_unicode_ci
collation_database => utf8_unicode_ci
collation_server => latin1_swedish_ci


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 06:51.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk