Selco Cod
Selco Cod

Yazılım ve güvenlik üzerine makaleler yazan günümüz teknolojisini yakından takip eden sıradan birisi...

Twitter


PHP Dosya İçerik Eklemesindeki Türkçe Karekter Hatası

PHP dilinde dosyaları kaydederken genelde fopen() ve fwrite() fonksiyonlarını kullanıyoruz fakat bu fonksiyonların maalesef türkçe ve utf-8 ile garezi varmış gibi utf-8 karekterlerinde sıkıntı çıkarmaktadırlar. Bu konu PHP.NET üzerinden de dile getirilmiş ve fwrite() fonksiyonu için UTF-8 karekter setini desteklemediği bildirilmiştir. Maalesef bunun çözümü farklı bir fonksiyon kullanmaktan geçiyor. Bahsi geçen fonksiyonumuz ise file_put_contents() fonksiyonu. Şimdi aradaki farkı anlamamız açısından bir örnek kod hazırladım ve çalıştırdım.
<?php
$dosyaAdi = 'text.txt';
$ornekVeri = 'Benim adım Selçuk Çelik, selcuk.in benim kişisel blog adresimdir.';
$dosyayiAc = fopen($dosyaAdi, 'a');
fwrite($dosyayiAc, $ornekVeri);
fclose($dosyayiAc);
# TEXT.TXT İÇERİĞİ: Benim adım Selçuk Çelik, selcuk.in benim kiÅŸisel blog adresimdir.
?>
Örnekte görüldüğü üzere text.txt dosyamızın içeriği maalesef karekter hatasıyla kaydedilmiştir. Bunu okuduğumuz da eğer sayfamızın charset değeri UTF-8 ise bir sıkıntı olmamaktadır fakat dışarıya verilen output bir değer olucak ise bunun karekter hatasından arındırılması daha hoş olacaktır. Şimdi çözüm kodlarımıza bakalım. Bilinenin aksine file_put_contents() fonksiyonu sadece dosya içeriğinin tamamını değiştirmekten ziyade aynı Filesystem fonksiyonları gb. dosyayı açıp içeriği sonuna ekleme parametresi barındırır. Daha detaylı şekilde şu adrese göz atabilirsiniz.
<?php
$dosyaAdi = 'text.txt';
$ornekVeri = 'Benim adım Selçuk Çelik, selcuk.in benim kişisel blog adresimdir.';
file_put_contents($dosyaAdi, "xEFxBBxBF".  $ornekVeri);
# TEXT.TXT İÇERİĞİ: Benim adım Selçuk Çelik, selcuk.in benim kişisel blog adresimdir.
?>
Gördüğünüz gibi türkçe karekterlerimiz düzgünce kayıt edildi. Dikkatinizi muhakkak xEFxBBxBF karekterleri çekmiştir. Bu karekteri dosyamızın başına ekleyecek dosyamızı BOM UTF-8 olarak kaydetmemizi sağlıyor ve karekter hatalarından arındırıyor. Ve bu karekterleri de maalesef ki fwrite() fonksiyonu ile ekleyemiyoruz.


Yazı Hakkında Yorumlar