UTF-8 BOM (BYTE ORDER MARK) NEDİR?

Aslında çok ciddi sorunlara yol açan UTF-8 BOM (Byte Order Mark) nedense birçok kişi tarafından bilinmiyor. Fakat o kadar ciddi bir durum ki sitenizin tüm karakterlerinizin bozulmasına veya sitenin tamamen çökmesine (görüntülenmemesine) neden olabiliyor. Aslında bu konuya daha önce En Yaygın WordPress Hatası başlıklı makalemde değinmiştim ama burada biraz daha geniş ve anlaşılır bir şekilde açıklamak istiyorum.

BOM UTF-8 ile birlikte ortaya çıkmış olup dosyanın UTF-8 olduğunu gösteren bir işarettir. Bir dosyanın yapısını yazı düzenleyicinizde UTF-8’e çevirirseniz bu işaret kendiliğinden dosyanın en başına eklenir. Peki nasıl bir şeydir bu BOM işareti derseniz şudur: 

Sebep Olduğu Problemler

Öncelikle başlık (header) meselesi sorunudur. Tarayıcıda ilk görüntülenmesi gerekenler başlıklardır. Fakat bu kod sayfanın en başına eklendikleri için başlıklardan önce görüntülenirler ki bu durumda bir hata mesajıyla karşılarsınız.
Warning: Cannot modify header information – headers already sent by …

Diğer bir sorun internet explorer’da kodu görmeseniz bile bir satırlık bir alan işgal eder ve siteniz üstten bir satır aşağıya iner. Dilediğiniz kadar css ile sıfırlamaya çalışsanızda yukarıdaki boşluğu bunu başaramazsınız çünkü orada BOM vardır.

Sayfanızda Türkçe karakterlerin tamamen bozuk görünmesine neden olabilir.

Çözüm

Çözüm oldukça basit. Dosyanızı UTF-8’e çevirirken yazı düzenleyicinizde BOM olmadan UTF-8 seçeneğini seçmelisiniz. Malesef bunu yapmak için direk kodları silemiyoruz çünkü yazı düzenleyiciler bu karakterleri görmüyor. Biz dosyanın dil yapısını değiştirerek bu işaretten kurtulacağız. En çok kullanılan iki düzenleyici olan Notepad2 ve Notepad++ yazılımlarında resimle nasıl bu işaretten kurtulabileceğinizi gösterelim.

Notepad++ (Benim Tercihim)
Notepad++ programında Format altında BOM olmadan UTF-8 (UTF-8 without BOM)’u seçerek sorunu giderebilirsiniz.
Notepad++

Not 1: Mevcut bir dosya ANSI formatında ve Türkçe karakter içeriyorsa onu dönüştürmek için Dönüştür (UTF-8 Without BOM) seçeneğini seçerseniz karakterleriniz bozulmadan BOM’suz UTF-8 formatında kodlamaya geçebilirsiniz.

Not 2: Türkçe karakterli dosyayı dönüştürmenin uzun yolu ise şu şekildedir. Önce Ctrl+A ile tüm yazıyı seçip Kes’in. Ardından dosyanın formatını resimlerdeki gibi değiştiri. Sonra kestiklerinizi tekrar yapıştırın ve dosyanızı kaydedin.

Notepad2
Notepad2 programında File->Encoding altında sadece UTF-8 olan seçeneği seçerek sorunu çözebilirsiniz.
Notepad2

Not 1:Bu makaleyi denen şimdi yazdığımı merak ediyorsanız söyleyeyim. XHTML standartları nedeniyle W3’ün HTML Validator sayfasına işim düşmüştü. Orada şöyle bir mesajla karşılaştım.

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.

Yani diyor ki BOM’lu dosyaların bazı düzenleyicilerde ve tarayıcılarda problem çıkardığı bilinmektedir. Bu nedenle BOM daha iyi desteklenene kadar bu işareti kullanmaktan kaçınsanız iyi olur.

Not 2: BOM, özellikle tema Türkçe’leştirmelerinde dikkat edilmesi gereken bir husus.

BOM hakkında söyleyeceklerim bu kadar. Daha dikkatli yazılmış kodlarda görüşmek dileğiyle…

DEVAMINI OKUYUN
  • x-treme

    Bir sistemde ajax ile veri çekiyordum;
    her defasında “Cannot modify header information – headers already sent by..” hatası alıyordum; ne yaptıysam sonuç değişmedi; ajax ile veri aldığım için karakter kodunu UTF-8 yapmak zorundaydım, dosyayı Notepad programı ile farklı kaydetten UTF-8 yaptığım için dosya bozuluyormuş meğer. Tam yarım günümü yedi bu melet. Ellerine sağlık dostum, sorun bu aptal Notepad’den kaynaklanıyormuş; eburhan’ın anlattığı gibi artık Notepad2 kullanıyorum, mutluyum :)

  • İlginç bir çözüm şekli olsa da paylaşmak istedim:

    İlk satıra “deneme” gibi bir metin yazdıktan sonra dosyayı kaydedip metni silerseniz BOM illetinden kurtulmuş oluyorsunuz.

  • iksdf

    eyv. işime yaradı..

  • Evren YALÇIN

    Kendi web sitemdede çıkan BOM sorununu php manuelde gördüğüm bir php kodla çözdüm.

    Aşağıdaki kodu sayfanızın en tepesine yerleştiriyorsunuz. Ve sorununuz kökten çözümleniyor.

    3 karakterlik utf-8 karakterinin üstüne boş yazıyor.

    Saygılarımla…

    • LeyLa

      merhaba, benim de aynı sorunum var. Boş sıra var ve sitemi bozuyor. UTF-8 Without BOM seçeneğini ve bir çok şeyi denedim fakat olmadı. Kod' tan bahsediyorsunuz, yazabilirmisiniz lütfen çok acil. Teşekkür ederim şimdiden.

  • malesef kod görünmemiş. Bana mail ile gönderirseniz makaleye ekleyebilirim.

  • çağlar

    teşekkürler yardımın işe yaradı

  • vatan

    hocam benim notepad++ da file-> encoding diye bir menu yok.

  • @vatan, son sürüm notepad++ indir, olması gerekli.

  • Fatih

    Arkadaşım sana çok ama çok teşekkür ederim.
    Yaptığım tüm işlemlerde veritabanı ayarı gibi herşey UTF 8 olmasına rağmen , kodlarımı yazdığım dosya kodlaması BOMLU UTF8 olduğu için hep hata alıyordum.

    Sayende bunu öğrendim,çok ama çok teekkür ederim.

  • Ne demek Fatih, işinize yaradıysa ne mutlu bana ;)

  • Merhaba. hem tema dosyalarını hem eklentileri utf8-bomsuz olarak kodluyorum notepad++ da ve kaydedip upload ediyorum serverıma ancak baktım türkçe karakter sorunu düzelmedi.

    sonra tekrar bakayım dedim. notepad++ da açtım dosyayı. bir baktım hala kodlama ANSI olarak gözüküyor. yani değiştir deyip kaydettiğim halde bir sonraki açışta yine ansi.. bu sorunu nasıl çözeriz?

    • Dosyayı gönderirken FTP ayarlarından dosya değişiyor olabilir diyeceğim ama tamda emin değilim buna neyin sebep olabileceği konusunda.

  • çok teşekkür ederim kafayı yemiştim şu w3 ile 3 hata kaldı 1 uyarı şimdi yarın şirkete gittiğimde bu uyarıyı notepad++ da düzenleyeceğim diğer marquee olaylarınıda css kullanarak temizleyip şu html geliştiricileri denilen olaya onaylatmak istiyorum şu siteyi :) saygılarımla

  • teşekkürler,hata raporu doğrultusunda geldim pek işime yaradı makale

  • ilyas TEKER

    22 senedir BOM suz yaşamışım meğer : ) 1 haftadır çözemediğim problemi BOM ile çözdüm. Biraz araştırdım nette meğerse sorun olabilecek kadar kurnazmış BOM.

    Üstelik pluginlerin de çalışmasını değiştirebildiğini biliyor muydunuz?

  • Fikret

    Teşekkürler.Makale çok aydınlatıcı oldu.

  • Walla kardeş harikasın. Şu makalen olmasaydı günlerim bu problemi çözmekle geçecekti. 5 dk’da tüm sistemi toparladım sayende.

    Allah razı olsun.

  • Çağlar

    Teşekkürler.

  • Sormak istediğim husus sayfamı BOM’lu UTF-8 yaptığım anda gerçekten sıkıntı yaratabilir mi?

    Bu arada çok teşekkür ederim Erhan bey. Gerçekten çok yararlı ve işime yarayan bir makale oldu. Kaç gündür header ve session hataları ile uğraşırken ilaç gibi geldi.

    Tekrar teşekkür ediyorum.

    • İnanın bana ne zaman bu düzeltmeyi unuttuysam sorun yaşadım :)

  • bilgi için sağol şimdi deniyorum umarm sorun çözülür.

  • kral

    Öncelikle bu konuya acıklık getirdiginiz için çok teşekkur ederim.Bendede ayni sorun vardi wp temam ei6 da sayfanın kaynak kodlarına bakınca karekter hatalari veriyordu.Anlattıgınız şekilde dosyaları düzelttim fakat sayfalardaki sorun halolmasina ragmen indexte hala ayni sorunu veriyor.Ayrica nihilanth arkadaşında dedigi gibi bazen notepad++ ile dosyalari düzeltiyorum tekrar baktıgımda yine ANSI olarak okuyor.Bir kaç denemeyle bunuda aştım ama indexte hala ayni sorun bulunuyor.Bu durum için yapmamız gereken başka bir bişey varmı?.Şimdiden teşekkurler kolay gelsin.

  • Behçet MUTLU

    Harika bir makale olmuş, ellerine sağlık. Oldukça dikkat edilmesi gereken ve karşılaşsak bile bir türlü sebebini bilemediğimiz bir sorundu. Ben de kendimce farklı çözümlerle çözüyordum bunu, örneğin; yeni bir dosya açarak tüm kodları oraya kopyalamak… Karakter kodlaması sorunları ne zaman düzeltilecek çok merak ediyorum. Yazılım geliştirirken karakter kodlamalarındaki hataların da göz önünde bulunması gerekiyor bence. Günümüz yazılım mühendisleri pek te önemsemiyor ancak sizin de belirttiğiniz gibi, çok büyük sorunları yanında getirebiliyor.

  • Tanerkaymaz

    Merhaba, ben sitemi HTML Validator sitesinde tarattırdığımda şöyle bir hata mesajı ile karşılaştım.

    Sorry, I am unable to validate this document because on line 132 it contained one or more bytes that I cannot interpret as utf-8 (in other words, the bytes found are not valid values in the specified Character Encoding). Please check both the content of the file and the character encoding indication.

    The error was: utf8 “xFE” does not map to Unicode

    Bu hatayı araştırırken açtığınız konuya denk geldim ve dediklerinizi uyguladım yanlız uygulamadan sonra sitenin üzerinde boşluk oluştu aslında tam tersi olması gerekliydi ancak dediklerinizi yapınca meydana geldi şimdi BOM’da yapsam UTF-8 de yapsam sitenin üzerinde 1 satır boşluk oluyor.Birinci sorum bu olsun aslında konunuzla tam alakalı değil ama HTML Validator sitesinden aldığım hata hakkındada bilginiz varsa ve paylaşırsanız sevinirim.

    • @Taner Bey, sitenizi tarayıcıda açıp kaynak koduna bakın. &copy, • gibi karakterler kod ile değil de doğrudan yazılmışsa sorun yaratırlar çünkü bunlar uygun UTF 8 karakterler değillerdir. Bu konuda daha fazla yardım için SEO Teknikleri forumuna başvurabilirsiniz.

      Dosyanın üzerinde boşluk olması konusunda da dosyadan silemiyorsunuz büyük ihtimalle malum kodu. Tavsiyem yeni bir php dosya yaratın ve içi boş ike UTF-8 yapın. Ardından diğer dosyalardaki metni kopyalayıp yapıştırın ve dosya ismini olması gerekenle değiştirin. Düzelir sanırım.

  • kadir

    3 kez sitenin tüm kodlarını gözden geçirmeme sebep olan satır atlamanın header’deki utf8 bom’undan kaynaklandığını tesadüfen farkettikten sonra yaptığım aramada bu nadide bilginize ulaştım. geç oldu ama faydalı oldu, teşekkür ederim.

  • Samet Çubukcu

    Save with BOM ne işe yarar öğrendik teşekkürler.

  • Sitemde wp kurulu ve makalede de dediğiniz gibi üstte bir boşluk oluyor ve w3.org baktığımda sadece 1 warning görünüyor.

    "The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported. "

    Notepad++ da açın demişsinizde ben hangi dosyayı açacağım. Temanın bütün dosyalarınımı açmam gerekiyor..

    • Temanın tüm dosyalarında bu işlemi uyglamanızda fayda var.

      • Notepad++ programını indirip dosyayı açtım ama zaten programda "UTF-8 without BOM" seçili durumda. değiştirip tekrar seçince de karakterler falan bozuluyor. Ne yapmam gerekiyor iki gündür w3 de hataları gidermeye çalışıyorum. Şimdi bir tek bu kaldı.

      • Tüm dosyalarınızı kontrol edin. O da olmazsa Ultra Edit gibi bir düzenleyici programı deneyin.

      • Yardımlar için çok teşekkür ederim. Şu anda w3 de hiçbir hata görünmüyor ama sitenin en üstündeki boşluk hala gitmedi. Onu nasıl düzeltebilirim.

      • Yukarıda anlatılan şeyleri yaparak düzeltebilirsin :) Özellikle header.php dosyası.

  • üstteki işlemleri uyguladım zaten :) Şu anda sitede hiçbir hata falan yok. bir tek en üst satırda boşluk var. :)

    • O halde bilemiyorum malesef. Mesele herhangi başka bir şey olabilir.

      • ben biraz daha araştırayım o zaman. Yardımlar için tekrar teşekkürler…

  • fatih

    Bir dizi teşekkürün altına bir teşekkür de ben edeyim. Üç yıldır bu işle uğraşıyorum ufak ufak ilerliyorum. UTF-8 işime geliyor açıkcası, o yüzden seviyorum. Ama o bir satır boşluk beni deli etmişti. Google bot o bir satırı – şeklinde okuyor, sayfa kaynağına bakınca da sayfanın başında bir adet lanet olası “-” görüyordum. Bunu kendi yöntemlerimle çözdüm. Bütün dosyaları DRW ile yaratıp, DRW ile yaratılmayanları da kodları kesmek suretiyle DRW ile yeni bir dosya açıp yeniden oluşturmak. Bunu yaptığımda o lanet – görünmez olmuştu. Sorun da notepad++ ‘da kaynaklanıyor diyordum kendi kendime bunları bilmezden evvel. Meğer ben winthout BOM seçmezmişim de ondan olurmuş.

  • Abdullah

    Tam 4 saattir denemediğim yöntem araştırmadığım kaynak kalmadı çok teşekkür ediyorum bu pek bilinmeyen ama ÖNEMLİ olan bilgiyi bizlerle paylaştığın için..

  • Kalpsiz

    Ozamanda Türkçe karakter hatası veriyor??

  • güzel bir makale olmuş teşekkürler.

  • Cihan

    Allah razı olsun, başka hiçbirşey demeye gerek yok. Kendim çok uğraştım, sonra sizin makalenizi buldum ve anında sorun çözüldü. Çok teşekkürler…

  • oktay

    Merhaba.
    Css ve PHP dosyalarını notepad++ ile tanışana kadar notepad ile düzenliyordum. Türkçe karakter sorunu yaşamamak için de belgeleri ANSI formatından UTF-8 formatına dönüştürüp kaydediyordum. Bu da sayfalarda kaymalara neden oluyordu haliyle. ben de tekrar css ile oynayarak düzeltmeye çalışıyordum. Son 1.5 gündür de bu sorunla uğraşıyordum :)

    Burada bu çözümü bulmak herşeyi kökünden çözdü. Çok teşekkür ederim verdiğiniz bilgiler için. Kolay gelsin.

  • Çok yararlı bir makale olmuş.

  • Hocam çok yararı oldu anlatıklarınızı mükemmel ders olmuş gerçekten bilmeyenlere bu hatayı birden fazla sitemde alıyordum şuanda hepsini düzeltim tekrardan teşekkürler

  • notepad++ da encoding kısmında "encode in" ve "convert to" farkı var.
    dosyanızı düzenledikten sonra değiştirmek isterseniz "convert to" kısmını kullanırsanız iyi olur.
    yani;
    convert to utf-8 without bom

  • Bir de setting>preference penceresine girince new document sekmesindeki encoding bölümünden utf-8 without bom seçeneğini işaretlerseniz yeni dosyalarınız bu ayarla açılır.
    kutucuğuda işaretleyin sonradan açtıklarınızda otomatik çevirilsin.

  • ben ne yaptıysa olmuyor
    yıllardı notepad++ kullanırım ama kullandığım wp temsında unucode ansi görünen yer
    ne yaparsam değişmiyor.
    dw ile bakıyorum kodlama utf-8 notepad ile bakıyorum unicod.

    sitemde türkçe karakterler görünmüyor.bozuk çıksa keşke.hiç çıkmıyor.
    temayada okadar çok hayranımki ne yapacağım bilemiyorum.

    konu hakkında destek verebilecek arkadaşlar bekleniyor.
    saygılarımla.

  • Valla konu Google olunca ne desek boş. Yani sorun olmaz derim, olur sonra ben arada kalırım :)

  • test

    test

  • Tesekkür ederim cok yararlı oldu bilgileriniz sitemi onaylatamıyordum bu yüzden

  • Peki hocam bende ANSI dil kodlamalı bir tema var onların dosyasını komple tek tek Notepad2'le UTF-8 yapsam bir sakıncası olurmu. Çünkü Türkçe kelime yazdığımda sorun oluyorda yardım ederseniz bu konuda sevinirim saygılarımla.

  • kenan

    Php dosanızda header() fonsiyonuyla çözüm üretirken bu hatayı alıyorsanız ve buradaki çözüm sorununuzu çözmediyse.. HTML tag 'lerinin bulunduğu php dosyalarında header() fonsiyonu içerisinde belirtilen ergumanları çalıştırmada başlangıçta çalıştığı halde sonradan bu hatayı ürettiğini görürsünüz o nedenle çözüm için eğer header() fonksiyon argümanı olarak sayfa yönlendirmesini(Location) kullanıyorsanız bunu javascript ile yapmanızı önerebilirim. Aynı sıkıntı benimde sorunum oldu çözümü bu şekilde yaptım.

  • Mehmet

    Notepad++ bilgilendirmesi için çok teşekkürler. Programı indirdim kurdum.
    Gerçekten mükemmel bir notepad programı hatta çok daha fazlası diyebilirim.

    Ben joomla ile web siteleri oluşturuyorum. Ve No BOM olarak kaydedilmesi gerekiyor pek çok dosyanın.
    Mesela Türkçeye çevrilmiş bir dil dosyasını notepad++ da açıyorum içerik gayet düzgün okunuyor.
    Ancak Notepad++ ile kodlamasına baktığımda ANSI olarak görünüyor.
    Ctrl+A ile tümünü seçiyorum Kesiyorum, sonra dil kodlamasını UTF8 NoBOM olarak kaydediyorum ve kestiğim yazıyı yapıştırıyorum.
    Buraya kadar herşey yolunda sorun yok.
    Ancaaaak çevirisi unutulmuş bazı kelimeler gördüğüm zaman yeniden düzenlediğimde, eğerki kelimenin içerisinde ı, ş, ğ gibi harfler varsa bunları yazarken direkt üstü çizgili y gibi, ortadan şişkin d gibi garip karakterler çıkıyor. Bunun Çözümü nedir yardımcı olurmusunuz lütfen?

    Paylaşım ve bilgilendirme için çok teşekkürler.

  • Mehmet

    Bu arada düzenlediğim dosya .ini dosyasıdır

  • Çok teşekkür ettim kardeşim inan çok işime yaradı 8 saattir site internet explorer tarayıcısında dağınık ve sola yaslanmış şekilde çıkıyordu biraz araştırdım dil kodlamasından kaynaklıymış daha sonrasında css kontrolü yaptırdığımda Byte-Order Mark found in UTF-8 File. hatasını aldım söylediğiniz şekilde dil dosyamı tekrar editledim sorun kalmadı sağolun ;)

  • Teşekkür ederim benim için gerçekten faydalı bir yazıydı ellerinize sağlık

  • dediklerini yaptım fakat The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.
    hatası devam ediyor

  • bu hata benim çok karşılaştığım bir hata açıklama içim teşşekürler

  • Makyaj

    Hala böyle hatalar çıkıyor. Teşekkürler. Bu arada notepad++ çok işime yardı :)

  • Armagan

    Merhaba Erhan Bey,
    Birden fazla dosyanin karakter kodlamasini degisterebilecek bir program biliyormusunuz acaba? 300 e yakin filmim var ve tum altyazilari UTF-8 BOM'suz sekilde degistirmem gerekiyor Plex'teki Turkce karakter sorunu asabilmek icin. Kisa bir yol ariyorum acikcasi:) Google da program ararken bu konuya denk geldim. Bir sorayim dedim.

    Simdiden tesekkurler.

  • umut

    Adamın hammaddesisin :)

  • harun karadag

    ANSII kodlamasını korumam gereken bir sürü dosyam var. microsoft expression web dosya kodlamasını otomatik olarak utf yapıyor ve bazen gözden kaçıyor ve kaydediyorum. Farklı bir programda ansii olarak kaydedilip expression web ile daha sonra çalıştığımda bu sorun olmuyor. tek tek yüzlerce dosyayı farklı programda açıp kodlama değişitrmek bir ölüm. özellikle karakterleri yeniden yazmak. programın bakmadığım yeri kalmadı. varsayılan kodlama türünü ANSII yapabileceğim bir yer var mı bu programda. sürüm 4

  • çok teşekkürler yararlı bir makale olmuş elinize sağlık

  • Emre

    Dostum header.php dosyasınamı bu işlemi uygulayacağız ??

  • ersin

    Valla ne diyeceğimi bilemiyorum !!! Büyük bir yükten kurtuldum ! Çok teşekkür ederim !

  • Çok faydalı bir yazı olmuş teşekkürler.

  • Microsoft’un notepad uygulamasında bunu nasıl yaparız?

  • Nejdet Acar

    Uzun zaman önce aynı soruna çare ararken sitenizi ve bu sayfayı görmüş ve çözümden faydalanmıştım. Bir teşekkürü hak eden bir yazı. Teşekkür ederim.