|
Systémové řešení (link) |
25.7.2012 17:42
František Kučera
|
| 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.
|
|
|
|
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
19.6.2013 6:43 /MaReK Olšavský Svobodný operační systém Contiki nepatří mezi běžně známý software. Výrobce LED „žárovek“ se rozhodl jím osadit výrobky, včetně WiFi konektivity a osvětlení tak bude možné ovládat z chytrého telefonu.
Přidat komentář
19.6.2013 6:43 /MaReK Olšavský Začíná se vyjasňovat v budoucnosti ARMu u AMD. První mikroprocesory by měly být v prodeji v prvním čtvrtletí 2014, jako nástupce současné řady Opteron X. Pokud ale nenabídnou výrazně vyšší výkon, či výrazně menší spotřebu, asi jen největší nadšenci najdou důvod pro přechod od rozšířené a osvědčené platformy x86.
Přidat komentář
18.6.2013 7:01 /MaReK Olšavský Ač se to zdá neuvěřitelné, případ SCO vs. IBM je otevřený. Znovu jej otevřel soud v Utahu, na žádost ještě stále „kopající“ SCO Group. O výsledku případu je těžké polemizovat. Kolem Linuxu se točí velké množství peněz a kdyby dovedlo SCO vybírat poplatky jen za komerční nasazení, možná by mělo příjmy srovnatelně s Red Hatem.
Přidat komentář
18.6.2013 7:01 /MaReK Olšavský Přehrávač Songbird, vyvíjený nad jádrem Gecko, nikdy výrazně neprosadil a od roku 2010 není vyvíjen pro Linux. Eric Wirttman oznámil ukončení projektu k 28. červnu. Zvedne někdo hozenou rukavici, nebo skončí Songbird na smetišti zapomenutých projektů?
Komentářů: 2
17.6.2013 6:54 /MaReK Olšavský Velký přínos pro tržní podíl MariaDB bude znamenat Red Hat Enterprise Linux, který je dalším řadě distribucí přecházejících od MySQL na MariaDB. Vývojáři MariaDB získají, díky síle Red Hatu, významnou pozici na trhu databází.
Komentářů: 1
17.6.2013 6:54 /MaReK Olšavský Nedlouho po vydání Debianu 7 vychází upgradovaný Debian 7.1, který přináší bezpečnostní opravy. Vydání je určené jen pro prvotní instalaci, updaty z repozitářů již problémy řešily.
Přidat komentář
14.6.2013 7:16 /MaReK Olšavský Příjemnou zprávou ze sousedního Německa je oficiální odmítání softwarových patentů v německém parlamentu (Bundestagu). Při síle Německa v EU a světě jde o výrazný posun na cestě k jejich zabránění. Méně příjemnou je zamítnutí přechodu Berlína na GNU/Linux (alespoň prozatím, třeba se časem ledy pohnou).
Přidat komentář
13.6.2013 7:13 /MaReK Olšavský Jim Whitehurst, CEO Red Hatu, vysvětloval na Red Hat Summitu, že svobodný software není jen o ceně, ale především je hlavním nositelem inovací. Mnoho zajímavých inovací určitě přinese i připravovaný RHEL 7, ale desktopové uživatele bude nejspíše nejvíce zajímat změna desktopu na GNOME 3 Classic mode.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
19.6.2013 6:19 /
MaReK Olšavský Dement
19.6.2013 5:38 /
MaReK Olšavský Re: ???
18.6.2013 22:21 /
Petr Ježek ???
17.6.2013 18:24 /
Karel Belunek Super!!!
16.6.2013 14:32 /
Petr Ježek jeden ztratil
Více ...
|