PHP skripty + kodovanie UTF-8 = problem

Programovacie jazyky, rady, poradňa...
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

PHP skripty + kodovanie UTF-8 = problem

Príspevok od používateľa Mek »

Zdravim, robim na jednom projekte, kde je poziadavka mat vsetko v UTF-8. To sa mi sice podarilo, az na jednu malickost:
Vzdy, ked nastavim kodovanie PHP skriptu (suboru php) na UTF-8, tak server zrejme uuuuplne na zaciatku skriptu vypise nejaky neviditelny znak, takze uz potom v skripte nemozem pouzit header() ani session_start(), lebo hlavicky vraj uz boli poslane na riadku 1 (na ktorom ale nic nemam).
Akonahle nastavim kodovanie skriptu na ANSI a ulozim, vsetko bezi, ako ma.
Ten neviditelny znak sa v prehliadaci neukazuje, ani vo "view source" okienku vo FF nie je vidno, ale vo "view-source" v IE (teda v notepade) ho vidno, je to taky cierny stvorcek uplne na zaciatku suboru. Nemam sajnu, kde sa tam berie...
Server mam na localhoste, pre istotu som skusal dva baliky php+mysql, a to Apache2Triad a EasyPHP (obe najnovsie verzie), problem sa vyskytuje v oboch.
Vie niekto, co s tym? :?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Tá vec sa volá BOM (Byte Order Mark). Niektoré editory ten znak pridávajú automaticky v prípade, že je ten súbor v kódovaní UTF-8. Budeš musieť použiť iný textový editor, alebo ten znak budeš musieť zo začiatku všetkých editovaných súborov vymazať ručne.
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

Problem je, ze ten znak nevidim.
BOM je mi povedome. Ten editor, ktory pouzivam (Notepad++) ma take menu, kde sa da prepnut kodovanie. Je tam okrem ineho ANSI a UTF-8 a potom je tam take zaskrtavacie policko "UTF-8 without BOM". Lenze toto policko je aktivne (tj. mozem ho zakrtnut) len ak mam zapnute kodovanie ANSI, co mi pride trosku nelogicke... :?
Skusim este sosnut novu verziu Notepad++, ci to nepomoze.
lammer
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2098
Registrovaný: 24 apr 2004, 18:45
Kontaktovať používateľa:

Príspevok od používateľa lammer »

na to sa vyser a pouzivaj gzip kompresiu vystupu.
pouziva sa na to toto:
http://www.php.net/manual/en/ref.outcontrol.php
potom ti to umozni posielaj kde chces co chces, pretoze sa zasobnik vyprazdni az na konci scriptu a teda ti umozni vykonat akykolvek ukon v akejkolvek polohe
a este dodam ze to znizuje zataz linky pretoze to vie stiahnut az o 80% velkost posielanych paketov.
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

ok, takze ak by som chcel pouzit gzip kompresiu, tak kod by vyzeral nejako takto?

Kód: Vybrať všetko

<?php
ob_start("ob_gzhandler");
session_start();
header('blablabla');
.
.
.
flush();
?>
lammer
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2098
Registrovaný: 24 apr 2004, 18:45
Kontaktovať používateľa:

Príspevok od používateľa lammer »

Kód: Vybrať všetko

<?php
ob_start();

header();
session_start();

cokolvek

ob_end_flush();

?> 
toto snad staci :)
davaj si bacha na preflushovanie, zbytocne nutis potom php crawlera aby odstranoval nadbytocne volania na zasobnik
staci ked to das do header a footer scriptu ktory si volas vzdy alebo do niecoho co nacitavas vzdy, napr index. to uz necham na teba
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

mastermind nás práve upozornil, že ten problém to vôbec neodstráni. Problém je, že ten BOM sa odošle ešte pred <?php a teda akákoľvek úprava http hlavičky už nie je možná.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

PSPad umoznuje vypnut ident. byty (BOM) v UTF kodovani ...

nikdy som s tym nemal problem ...



EDIT: ale ked teraz pozeram zdrojaky (v hexaeditore) tak vsade tie ident. byty mam .. a dokonca tam je FF FE co zodpoveda UTF-16 LE ... hmm .... tak neviem no ..
ale ako vravim ... zatial ziadny problem


to skor vidim na nejake divne nastavenie servera
Napísať odpoveď