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/)
-   -   Türkçe karakter sorunları ve çözümleri (https://www.ircforumlari.net/php/49807-turkce-karakter-sorunlari-ve-cozumleri.html)

Darkc0de 05 Şubat 2008 19:21

Türkçe karakter sorunları ve çözümleri
 
-Dosya Kaynaklı Türkçe Karakter Sorunları
Scriptlerle çok haşır neşir olan arkadaşlar çok iyi bilirlerki türkçe karakterler herzaman türklerin başına bela olmuştur :) Bu sorunun çözümü aslında gayet basit ancak insanların çoğu bilgisiz, bilgili olanlar ise fazla üşengeç :) Ben hem sizleri bilgilendirmek, hemde üşengeçliğinizi almak için bu makaleyi yazıyorum :) Artık başlayalım isterseniz ;)
Charsetlerden başlayalım ilk önce. Bildiğiniz gibi dünya üzerinde yüzlerce dil mevcut ve takdir edersinizki bu dillerin özellikleri birbirlerinden çok farklı. Öyleki çoğu dil, yapı olarak latin alfabesine bağlı olmasına karşın yakın dillerden de özel karakterler almışlar. Türkçede başa bela olan karakterler;
-ü -ş -ç -ö -ı -İ
UTF-8 denen charsetin özelliği dünyadaki bütün dilleri kendi içerisinde barındırması. Yani tüm diller için ortak bir charset. Ancak bu charseti sorunsuzca kullanabilmek için dosyanın da utf-8 olarak kaydedilmiş olması gerekmekte. Sadece bu da yetmiyor, ayrıca browser a da utf-8 charsetini kullanarak yorumlama yapmasını belirtmemiz gerekiyor. Bunun için de htmldeki <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> tagını kullanacağız.
Sanırım bu kadar bilgi yeterli artık çalışma vakti :) Şimdi yazdığım scripti tanıtayım sizlere.
Bu script belirttiğiniz bir klasör içindeki tüm dosyaları ve o klasörün içerdiği klasörlerin içindeki dosyaları utf-8 olarak kaydediyor. Size sadece <meta tagında belirtilmiş olan charseti utf-8 olarak değiştirmek, eğer böyle bir tanım yoksa sayfa başına <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> eklemek kalıyor.
PHP- Kodu:

<?
//Bu script Darkcode tarafindan [url]
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #0000BB">$dosya_agaci 
"test"//Bu degiskene degistirmek istediginiz dosyalarin bulundugu klasoru yazin. 
//*******AYARLAR BITIS**************//
set_time_limit(0);
function 
utfye_cevir($dosya){
$degistir "\xEF\xBB\xBF".$degistir;
$islem fopen($dosya,'w+');
$yaz fwrite($islem,$degistir);
fclose($islem);
}
function 
build_tree($dir){
        
$handle opendir($dir);
        while(
false !== ($readdir readdir($handle))){
            if(
$readdir != '.' && $readdir != '..'){
                
$path $dir.'/'.$readdir;
                if (
is_file($path)) {
                    
$output[] = substr($path0strlen($path));
                } elseif (
is_dir($path)) {
                    
$output[] = substr($path0strlen($path)).'/';
                    
$output array_merge($outputbuild_tree($path));
                }
            }
        }
        
closedir($handle);
        return 
$output;
 }
 
$agac build_tree($dosya_agaci);
foreach(
$agac as $dosyam){
utfye_cevir($dosyam);
}
?>

Ayrıca php ve ajax ı birlikte kullanan arkadaşların başına da bu tarz sorunlar çok gelir. Yine aynen bu sistemi kullanabilirler ancak charseti tagı ile belirlemek yerine headerla belirtmek daha sağlıklı sonuç verecektir.Detaylar için;
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
-Database Kaynaklı Türkçe Karakter Sorunları
Ehh tek sorun dosyalarda olmuyor. Databaseler de bizlere büyük sıkıntılar verebiliyor. Öyleki bu türkçe karakter sorununu çözemeyip tekrar sıfırdan scripti kuran çok arkadaş biliyorum :) Birazda bu yöntemin çözümlerinden bahsedelim. Çoğu arkadaşım charseti latin5_turkish_ci ye çevirerek çözüm aradıklarını belirttiler ancak ben o arkadaşların tersine bir yöntem tavsiye edeceğim. Ama öncesinde yine biraz açıklama yapalım :)
Öncelikle neden latin5_turkish_ci charsetini tavsiye etmiyorum buradan başlayalım. Şimdi siz database yapısını bu charsete çevirdiğiniz zaman mysql sorguları bu charsete göre işlemez. Bunun için sorguların işlendiği charseti değiştirmeniz gerekecek ve bunu extra kodlar ile yapacaksınız. Hele ki php bilmiyorsanız yandınız ki ne yandınız :) :D
O yüzden sizlere phpmyadminin standart charseti olan latin1_swedish_ci yi tavsiye ediyorum. Şimdi türkçe olmayan bir charset nasıl olurda türkçe karakterleri sorunsuzca görüntüler :) Aslında bu charset türkçe karakterleri türkçe olarak değilde kendi charsetinde aynı charcode değerine denk gelen farklı karakterle kayıt eder. Bugüne adar hep latin1_swedish_ci kullanırım herhangi bir sorun yaşamadım.
Darkcode #


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

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