
Bu dersimizde php ile kullanabildiğimiz encoding yani dil
kodlamarı arasında dönüştürme işleminine yarayan mutli byte
fonksiyonlarını inceleyeceğiz. Bu mutibyte fonksiyonlarından convert
encoding fonksiyonun ne işe yaradığını parametresini ve uygulamalarını
değincez. php.net ten manuelden ilgili fonksiyonun sayfasına giriyorum.
mb_convert_encoding komutunun sayfasına girdiğimde bunun php 4 ten beri
aktif olduğunu ve php 5 de geçerli olduğunu görüyorum. Şöyle bir
kullanımına baktığımda ilgili metin için karakter dönüşümü yani dil
kodlaması dönüşümü yaptığını görüyoruz. Aldığı parameteler olarak ilk
parametre dönüştürmek istediğim metinken ikinci parametre hangi dil
kodlamasına dönüştürüleceği üçüncü parametrede hangi dil kodlamasından
dönüştürülme işleminin yapılacağıdır. İşte bu komutun parametlerini
kullanarak ilgili sayfanın dil kodlamasını değiştirebilirim.
Şimdi
bir a.php sayfası oluşturup bu sayfayı dreamweaverda açıyorum. Birinci
bilmemiz gereken kavram burda page properties dediğimizde dosyaların
dil kodlamaları mevcuttur. İşte title encoding kısmına geldiğimde şu an
bu açılmış sayfanın utf-8 formatında kodlandığını görüyorum. Bunun
windows formatnda kodlanmasını yani Türkçe Windows formatında
kodlanmasını istersem. bunu seçtikten sonra uygula dediğimde ve tamam
dediğimde artık bu sayfam iso formatında kodlanmış oluyor.
Html olarakta hatırlarsak
<http-equiv="Content-Type" content="text/html; charset=utf-8">
bu
şekilde content type ekleyerek ve iso formatımızın ISO-8859-9 olduğunu
hatırlarsak bu sayfanın Türkçe kodlanmış bir sayfa olduğunu görüyorum
Burda vurgulamamız gereken noktayı tekrarlamak istersek Bir dosyanın
kodlaması mevcut birde bizim yaptığımız işlemlerde kodlama mevcut. Bu
sayfa şu an kaydetme itibari ile iso formatında kodlanmış durumda.
Şimdi php sayfama php tagı kapatıp açtıktan sonra az önce manuelden
bulduğum fonksiyonu alıp yerleştiriyorum. Normalde bu fonksiyonu
çalıştırmaya kalktığımızda hata mesajıyla karşılaşabiliriz.
Php.ini dosyamızdan iligli fonksiyonun kütüphanesinin aktif olması
gerekir. Dll lerde arama yaptığımda mb string dll yani php_mbstring.dll
olarak isimlendirilen dosya bu fonksiyonların kullanılmasına izin
vermektedir. Bu kütüphanem aktif değilse bunu şu an için kapatıp
;extension=php_mbstring.dll
sayfamızı bir çağırarak durumu görelim.Eğerki fonksiyon
bilgisayarımızda kapalıysa yani kütüphane aktif değilse sayfayı
çağırdığımızda call undefined function hatasını alırız.
<http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
mb_convert_encoding();
?>
Fatal error: Call to undefined function mb_convert_encoding() in D:\htdocs\ders\mb_convert.php on line 3
İşte bu hatayı aldığımızda php.ini mizi bulup ilgili dll i aktif
etmemiz gerekir. Php.ini mizin doğru yolunu bulmak için ise bir
info.php oluşturup sonra bu php dosyamızı açtıktan sonra içine
phpinfo() yazarak ilgili sayfayı browserimizdan çağırdığımızda bize
Loaded configuration file ile asıl php.ini dosyasının yerini söyler
İşte biz bu dizine girip ilgili sayfayı açtığımızda bu düzenlediğimiz
php.ini nin doğru php.ini olduğuna kesinlikle emin olabiliriz. Çünkü
bir bilgisayarda birden fazla php.ini bulunabilir. İşte fonksiyonu
kullanabilir hale geçmek için php_mbstring.dll i aktif hale getirirsek
Eğerki php bilgisayarımızda modül olarak çalışıyorsa apache yani web
sunucuyu tekrar başlatmamız gerekir.
Bundan sonra ise artık ilgili sayfayı çağırdığımızda kütüphane aktif
olduğu için Fonksiyon bulunamadı hatasından kurtulmuş oluruz.
Warning: Wrong parameter count for mb_convert_encoding() in D:\htdocs\ders\mb_convert.php on line 3
Evet artık fonksiyonu kullanabilir. İşleyişine geçebiliriz. İşte bu
fonskiyonu kullanırken şu an az önce söylediğim gibi sayfamız iso
formatında. İşte ilk parametre olarak dönüştürme yapmak istediğimiz
metni veririz. İkinci parametre ki bu metin içinde Türkçe ifadeler yer
alabilir.Türkçe karakterler Bu şekilde dosyamızın içerisinde yer
alabilir. İkinci paremetrenin hangi dil kodlamasına dönüştürme
yaptığımız olduğunu söylemiştik. Mesela bu metni utf-8 e dönüştürmek
istersem İkinci parametreyi utf-8 olarak veririm. Son parametre ise
dönüştürmenin hangi dilten gerçekleşeceğini temsil ediyor. ISO
formatındaki bir metni utf-8 formatına dönüştürmek istiyorsam Bu
şekilde komutumu yazabilirim.
<http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","UTF-8","ISO-8859-9");
?>
İşte bu sayfayı tekrar gidip browserdan çağırdığımda Karşıma UTF-8 e
dönüştüğü için garip görünen metin gelir. Şimdi bu metni tam tersini
yapmak isteyip UTF-8 den ISO formatına dönüştürmek istiyor isembu ifadeyi kullanabilirim
<http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","ISO-8859-9","UTF-8");
?>
İşte yine gördüğümüz gibi dönüştürme işlemi gerçekleştirildi.
Şimdi sayfamın page design ından UTF-8 e dönüştürüyorum Artık bu
kaydeceğim sayfa UTF-8 olarak kaydedilecektir. Doğal olarak buraya
yazdığım php kodu şu an utf-8 formatında İşte ben bu utf-8 formatını
iso ya dönüştür dediğimde Ki şuan bulunan sayfamıon dil kodlaması iso
formatında Ve sayfayı tekrar çağırdığımda Sorunsuz olduğunu görüyorum.
Tam ters kodlamayı düşünürsek burdaki ters işlemide yapabiliriz. Mesela
sayfamın browser a gönderilen dil kodlamasını UTF-8 e çevirdim. Daha
sonra burdaki ifadeleri ters çevirdim
Sonra design diyerek Page Properties den Title / Encoding i bu sefer
ISO formatı yani Türkçe WINDOWS a çevirdim. Daha sonra sayfamı kaydedip
tekrar koda gelip yapıştırdığımda Evet şu an sayfam iso formatında
olduğu için buraya yazdığım ifade iso formatında olmuş oldu.Bunu sayfada gösterebilmek için utf-8 e dönüştürmem gerekiyor.
<http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","UTF-8","ISO-8859-9");
?>
Dönüştürme işlemizi bu şekilde yapabiliriz.
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","UTF-8","WIN-1254");
desteklemediği bir dili kullanmış olduk
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in D:\htdocs\ders\mb_convert.php on line 2
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","UTF-8","auto");
Bakalım Eğerki dil kodlamasını kendimiz seçemiyorsak mb convert encoding fonksiyonunun kendisinin seçmesi için üçüncü parametreyi auto olarak verebiliriz. Bize dil kodlamasını çözümleyemediğini uyarı olarak verdi ama Dönüştürme işleminide sorunsoz olarak başardı. Burda hata vermesini engellemek için ki uyarı aslında burda verdiği uyarıdır. Başına at işareti koyarak işlem yapabiliriz.
İşte bu şekilde parametrelerini girerek Dil kodlamarı arasında dönüştürme işlemini çok rahat bir şekilde mb_convert_encoding komutunu ile sağlayabiliriz.
Bizim bilmemiz gereken aradaki uyumu sağlamak. Eğerki bir metin bize nerden geliyorsa bunu üçüncü parametre olarak vermeli Kendi sayfamızın dil kodlaması ne ise bunu ikinci parametre olarak vermeliyiz.
Bizim sayfamızın dosya olarak dil kodlaması az önce bahsettiğim gibi burda title/Encoding ayarı ile değiştirmiş oluyoruz. Eğerki bu değiştirme işlemini phped ile yapmanız gerekiyorsa PhpED ile açıp burda yer alan dil kodlamasını değiştirerek aynı işlemi gerçekleştirebiliriz. Hemen şurda altta yer alan dil kodlaması O an kaydedilen sayfanın dil kodlamasını temsil eder. Şuan WINDOWS-1254 şeklinde dil kodlaması gerçekleşmiş durumda.
Burdan bu şekilde UTF seçerek dil kodlamamızı UTF ye dönüştürebiliriz. Yine burdan windows formatında Türkçe karakter setine dönmek istiyorsak ISO yu seçebiliriz.
echo mb_convert_encoding("Selam Arkadaş ĞüÜçÇiİşŞ","WINDOWS-1254","auto");
sayfayı Sayfayı çağırdığımızda eğerki desteklemediği bir dil kodlaması ile karşılaşırsak Bunu bize uyarı olarak verir. Burdaki parametreyi auto olarak kullanarak ise yine dil kodlamasını dönüştürebiliriz.
İşte burda her seferinde bunları hatırlamak yerine utf2tr mesela Yada function tr2utf şeklinde iki fonksiyon tanımlarsak tr den utf 8 e dönüşüm için bu şekilde bir fonksiyon tanımlayabilir. Tabi burda metin olarak bir ifade alacağız. ve sabit değer yerine burdaki metni kullanacağız. Ters dönüşüm işlemi için ise Utf den yien buraya bir metin paremetresi almak üzere dönüştürme işlemini gerçekleştirebiliriz.Bu şekilde hangi parametre hangi parametreydi düşünmek yerine fonksiyonları kullanarak dil kodlaması dönüştürme işlemini sorunsuz bir şekilde gerçekleştirebiliriz.