28 czerwca 2008

Wbrew pozorom, tytuł tego newsa jest prawidłowy :) Te kilka znaczków doprowadziło mnie do stanu wrzenia :)

Już od dłuższego czasu szata graficzna tego bloga knociła się w niektórych przeglądarkach :/ Sprawdzałem kod HTML, sprawdzałem CSS ale nigdzie nie mogłem się dopatrzeć błędu :/ A ponieważ na Firefox 2 wszystko działało prawidłowo to po bezowocnych poszukiwaniach rozwiązania sprawę w końcu olałem :P No dobra, odłożyłem na bliżej nieokreśloną przyszłość :D

Teraz jednak przeszedłem na Firefox 3 i błąd zaczął mnie ponownie kłuć w oczy :/ Trochę wstyd żeby ktoś kto tworzy strony Internetowe miał taki błąd na własnym blogu i na dodatek nie umiał sobie z nim poradzić :D Tak więc dzisiaj przystąpiłem do ofensywy.

Ale może najpierw napiszę w czym tkwił problem. Otóż cała strona miała na górze odstęp kilkanaście pikseli. Jak ktoś trochę kuma to najłatwiej opisać to tak, że wyglądało to jakby element body miał padding-top ustawione na te kilkanaście px.

W tym problem, że dla wszystkich elementów, które wchodziły w rachubę zarówno margin jak i padding były ustawione na 0 :/ Gdy wstawiałem jakiś znak tuż po tagu body to i tak wyświetlał się z odstępem. Ale z body było wszystko dobrze ponieważ po pierwsze miał ustawione margin i padding na 0 a po drugie miał dodane tło i ono wyświetlało się prawidłowo.

A więc skąd ta przerwa?!?!? :/ Włączyłem Firebuga, wyłączyłem praktycznie cały CSS, usunąłem prawie wszystkie tagi HTML a odstęp nadal się wyświetlał :| Sobie myślę tak: skoro to nie CSS, nie HTML, nie Java Script to co do jasnej cholery? :/

No i mnie olśniło… Ano to co jest tytułem tego newsa :)

Parę razy już miałem z tym problem jednak do tej pory objawiał się on inaczej. Otóż kilka razy zdarzyło mi się, że po wywołaniu polecenia header() w PHP wyskakiwał błąd „Cannot add/modify header information – headers already sent by…”. Problem w tym, że ja nic nie wysyłałem. A tak mi się przynajmniej wydawało ;)

Nazywa się to Byte Order Mark. Zainteresowanych odsyłam do wikipedii. Opiszę tylko w skrócie, że podczas pracy z dokumentami z kodowaniem w Unikodzie edytor może zapisać na samym początku pliku informację BOM. Nie jest ona w żaden sposób widoczna dlatego trudno na pierwszy rzut oka stwierdzić czy jest ona w naszym pliku. Niektóre edytory ją wymagają, inne sobie z nią nie radzą. Ogólnie niezły bajzel :/

Przy wcześniej wspomnianym problemie z header() w PHP dość szybko doszedłem do rozwiązania a potem już pamiętałem co może powodować ten nieoczekiwany błąd. Jednak pierwszy raz spotkałem się z tym aby przez BOM rozwalała się szata graficzna strony :/

No cóż, człowiek uczy się na własnych błędach. Następnym razem będę już pamiętał :) Mam nadzieję, że zaoszczędzę tym wpisem trochę czasu i nerwów niektórym osobom ;) Jakiś czas temu testowałem różne edytory i pewnie wtedy „złapałem” BOM :)

Jak się pozbyć BOM? Ja otworzyłem plik w notatniku i jego zawartość skopiowałem do (uwaga! :D ) Pajączka, który automatycznie zamienił tajemniczy BOM na to:  :) Wystarczyło usunąć te krzaki, zapisać ponownie plik i po problemie. Niektóre edytory pozwalają też wybrać czy BOM ma zostać dodane. W Notatniku przy „Zapisz jako” można wybrać kodowanie (przynajmniej ja tak mam na Windows Vista). Nie sprawdzałem czy to coś daje ale można z tym poeksperymentować ;)

Życzę powodzenia w rozwiązywaniu problemów z BOM a sam idę się spalić ze wstydu, że męczyłem się z czymś tak błahym :)

Dodaj komentarz

7 odpowiedzi dla tego wpisu

  1. Kobejasi napisał:

    Kiedyś też się rozłożyłem na łopatki z tym błędem ;-) Zawsze otwierałem programy moim ulubionym PSPad, a raz otworzyłem plik w Notatnik++ i się potem zastanawiałem z godzinę dlaczego mi się szablon rozjeżdża ;-) Polecam Wszystkim program PSPad, wystarczy otworzyć w nim plik ustawić stronę kodowania i wcisnąć zapisz i po bólu ;-)

  2. Bastet napisał:

    Ehh … Żebym ja też Ciebie do takiego stanu doprowadzała, jak te krzaczki ;) Mmmm marzenie ;)
    Mój genialny programista ;) :*
    PS. A mówiłam żeby testować na mojej przeglądarce :> Teraz to się wstydź :P :D

  3. patab napisał:

    session_start tez nie zadziała przy tym

  4. MariuszT napisał:

    Tak jak napisałem, nie zadziała nic co wymaga aby zostało wysłane jako pierwsze do przeglądarki. Czyli właśnie session_start czy header. Bo ten cholerny BOM wyśle się jako pierwsze i wywali się nam błąd…

  5. toman napisał:

    hm, u mnie ten Bom pajaczek nie zamienia, w notatniku mam zapisane jako utf-8, otwieram w pajaczku, i nic

  6. MariuszT napisał:

    Ja nie otworzyłem w Pajączku tylko w notatniku i zawartość pliku przekopiowałem do nowego dokumentu w Pajączku. Wtedy BOM zamienił mi się na te krzaczki. Wystarczyło je usunąć i nadpisać plik.

  7. RudeDude napisał:

    Miałem dwa dni temu tez taki problem. Objawiał się tym że nie mogłem ustawić nagłówków funkcja w php do pliku wywoływanego przez ajax. Przypadkiem miałem jeden plik zapisany bez BOM i gdy wrzuciłem pliki na serwer hostingowy to zauważyłem że się nie wyświetlają polskie znaki w plikach z BOM. Jedynie w pliku który miał kodowanie bez BOM wszystkie polskie litery wyświetlały się poprawnie. Gdy otworzyłem plik notepad2 zauważyłem że kodowanie jest tam na utf8 bez sygnaturki. Później poczytałem o tym na wikipedii i zorientowałem się że notepad++ zapisuje w kodowaniu utf8 wraz z BOM. Dopiero gdy przestawiłem sobie na utf8 bez BOM wszystko zaczęło działać łącznie z wysyłaniem nagłówków przez php.

    Co do rozjeżdżania się strony to też to miałem, nie wiedziałem dlaczego tak się dzieje. Jedynie w Operze nie było odstępu od górnej krawędzi przeglądarki. Czytając tego posta postanowiłem że sprawdzę sobie jak teraz strona wygląda i faktycznie teraz nie mam tych odstępów u góry.

    Pozdrawiam!

Odpowiedz



Podobne wpisy: