UTF-8 BOM Sorunu

Tamer tarafından, 01 26 2014 22:00:00 tarihinde yayınlandı.

Bom dosyanın en başında bir simge olarak bulunur. BOM simgesi işe ““şeklindedir ve dosyanın UTF-8 olduğunun anlaşılması için bazı sistemlerde kullanılabilir.

Gelelim bu yüzden ortaya çıkan doğal sorunlar. Bildiğiniz gibi bir çok php komudu boşluk kabul etmez ve sayfa yüklenirken php'yi yapatmadan önce çalışması gerekmektedir. Örneğin: header komutları ve session komutları gibi.

“Warning: Cannot modify header information – headers already sent by…” ile başlayan bir hata alınabilmekte.

Eğer böyle bir sorunla karşılaşmış ve hangi dosyanın Bom'lu veya Bomsuz olduğunu bilmiyorsanız çözümü var.

1. Konsol Yöntemi

Linux'ta da dosyaları bir sürü dönüştürmek için recode veya iconv gibi komut satırı araçlarını kullanabilirsiniz. Aşağıda projem/ ve alt-dizinlerinin her php dosyasını çeviren bir komut zinciri:

$ cd projem/
$ for i in $(find -name '*.php'); do encoding=$(file -bi "$i" | 
sed
-e 's/.*[ ]charset=//'); iconv -f $encoding -t UTF-8 -o "$i" "$i"; done

Bu sayede projem klasörüne bağlı büyün dosyaları utf-8 bomsuz olarak ayarlayabilirsiniz.

2. Windows için Notepad ++
Windows kullanıyorsanız Notepad ++ ile dosyaları UTF-8 bomsuz olarak kaydete bilirsiniz.

3. Son Çare

Son çare olarak başlangıç dosyanıza bu kodu ekleyerek utf-8 bomsuz dosyayı include eder etmez çevirebilirsiniz.

index.php

ob_start('My_OB');
function My_OB($str, $flags)
{
    // UTF-8 BOM'i yakalıyor
    $str = preg_replace("/\xef\xbb\xbf/","",$str);
    return $str;
}
Etiketler : Yazılım, PHP, Genel