LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Diskuze: článek Byte order mark a PHP

Systémové řešení
(link)
25.7.2012 17:42
František Kučera
Věk: ( ~33 let) , Pracovní pozice: programátor , Praxe v IT let: ( ~10 let) , Bydliště: Praha

A nebylo by lepší opatchovat interpret PHP, aby si poradil s BOM?

Re: Systémové řešení
(link)
11.8.2012 05:39
Miloslav Ponkrác

Určitě nebylo. Protože PHP může zasahovat pouze do oddílů určených počáteční a koncovou značkou.

Opatchováním byste musel začít zasahovat do souboru v oblasti, který PHP nepřísluší.

Mimochodem, PHP nemá s BOM sebemenší problém, zpracovává jej naprosto korektně. Jako každou sekvenci bajtů, která není mezi počáteční a koncovou značkou pustí nezměněně na výstup.

Můžete to dokonce záměrně využít a v některých případech může být zaslání BOM znaku záměrem.

Dokonce nemusí nastat ani warning s již odeslanými hlavičkami. Stačí mít nastavený v PHP konfiguraci output_buffer na hodnotu vyšší nebo rovno třem bajtům a pak žádný warning nenastane ani s BOM znakem a hlavičky budou korektně odeslány. Stejně tak nenastane žádný warning, pokud nenastavujete v PHP žádné hlavičky, tedy nepoužíváte funkci header() nebo setcookie().

Důvodem, proč nastává warning je HTTP protokol. HTTP protokol, který přenáší data mezi web browserem (obecně user agentem) a webovým serverem vyžaduje aby byly nejdříve odeslány hlavičky a pak data. Odešlete-li přes PHP jakákoli data, pak již nejdou hlavičky odeslat. Data jsou v PHP odeslána prvním výstupem (tedy i znakem BOM, je-li), pokud tento výstup není bufferovaný – pak data jsou odeslána až po naplnění bufferu.

Re: Systémové řešení
(link)
30.9.2012 16:29
msx.

Na úvod len toľko, že pred rokmi som mal ten istý problém a vyriešil som ho používaním vhodne nastaveného editora a teraz k veci:

Ak tomu správne chápem, BOM je na to, aby aplikácia alebo skôr spracovateľ vstupu vedel, že sa jedná o UTF kódovanie bez toho, aby ho musel nejako detekovať. Je pravda, že PHP s tým vlastne problém nemá. Lenže ak to prekáža, tak to nejaký článok reťazca nevie správne spracovať. Ak je to protokol HTTP, tak je chyba v ňom a treba opraviť ten. Ideálny prípad je tieto znaky vôbec na výstup neposielať alebo ich normou úplne zrušiť. Každý rozuný editor vie, že tieto BOM robia len problémy a preto ich nepoužíva a radšej kódovanie detekuje. Ďalšia vec je, keďže sú to "skryté" znaky, nie každého napadne o čo sa jedná, ak má problém s presmerovaním. K týmto znakom by sa teda malo správať inak. Buď oznámiť BOM na vstupe a teda používateľ bude vedieť čo je za problém alebo ho rovno ignorovať. Samozrejme, prikláňam sa k druhej možnosti.

No a k zdrojáku na odstraňovanie BOM:
Zdroják je síce fajn, ale zbytočnosť. Každý, kto sa programovaniu venuje aspoň v takej miere, že počíta s tým, že programovať bude aj naďalej sa na zdroják vykašle a stiahne si poriadny editor, prípadne si správne nastaví ten svoj. Ak sa jeho editor nastaviť nedá, tak ten editor na programovanie nie je vhodný.

Ako som už napísal, s týmto problémom som sa už pred rokmi stretol, nejako som to vyriešil (asi som si nastavil editor) a odvtedy neviem čo je to problém s BOM. A to som už skúšal nejeden editor, ktorý som ani nenastavoval (prešiel som tuším z Dreamweaver, ktorý bolo treba nastaviť, na PSPad a neskôr k NetBeans).

Teraz ma napadlo na čo je ten zdroják dobrý. Ono je to vlastne na to, že práca je rozrobená a nie je to ako opraviť do funkčného stavu. Ale to skutočne neexistuje na to nástroj? Priznám sa, že ako som odstránil BOMy sa už nepamätám.

Re: Systémové řešení
(link)
6.10.2012 08:01
Miloslav Ponkrác

HTTP nemá žádný problém s BOM znakem. Všechny články řetězce jsou v pohodě vůči BOM znaku.

Jediný problém má programátor, který v některých případech je zaskočen tím, že je BOM znak zpracován a podle všech korektních pravidel poslán všemi řetězci jako výstup se všemi důsledky. Programátorovi se to občas nehodí, protože zahájením výstupu přes PHP skript -> PHPinterpretr -> HTTP protokol -> webový browser (nebo obecně user agent) má za následek také zaslání všech hlaviček HTTP protokolu a ukončení možnosti jejich změny.

Všechny články řetězce fungují korektně a všechny umějí bez problémů zpracovat BOM znak jasně určeným způsobem, viz potřebné normy, RFC, atd. atd. V žádném článku řetězce není problém, nic není potřeba měnit.

Řeknu to analogií: Když si programátor nejdříve smaže soubor a pak si vzpomene, že by z toho souboru chtěl přečíst nějaká data – všechny řetězce, tedy API -> operační systém -> filesystém driver -> diskový driver pracují v pohodě, perfektně, bez chyby a nic na nich není potřeba měnit. Pouze programátor je idiot, že udělal nesprávné pořadí operací a těžko může čekat, že ze souboru, který neexistuje, bude číst.

A tak je to i se znakem BOM. PHP se (při vypnutém bufferu) chová tak, že zasláním výstupu – kterým je i neviditelný znak BOM – se odešlou i HTTP hlavičky a zablokují se proti změně. Tedy je to pouze problém programátora. Pokud nepotřebujete měnit HTTP hlavičky, můžete klidně psát PHP skripty s BOM znaky a žádného problému se nenadějete.

Miloslav Ponkrác

Re: Systémové řešení
(link)
6.10.2012 08:07
Miloslav Ponkrác

Možná pro vysvětlení problému. Vlastní BOM znak není problém. Úplně stejná situace nastane, když bude na začátku jakýkoli znak či řetězec. Například řetězec s názvem naší zlodějské strany "ODS" způsobí přesně stejné důsledky jako BOM znak – nemlich a do puntíku ty samé, protože to co způsobuje problém jsou jakékoli znaky a řetězce před začátkem PHP skriptu. Nikoli BOM znak.

DISKUZE

Systémové řešení 25.7.2012 17:42 František Kučera
  L Re: Systémové řešení 11.8.2012 05:39 Miloslav Ponkrác
    L Re: Systémové řešení 30.9.2012 16:29 msx.
      |- Re: Systémové řešení 6.10.2012 08:01 Miloslav Ponkrác
      L Re: Systémové řešení 6.10.2012 08:07 Miloslav Ponkrác




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

15.12.2017 15:11 / Petit
freehold nj

15.12.2017 15:06 / Petit
nj freehold

5.12.2017 11:50 / Thomas
kitchen renovations

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze