PHP vs UTF-8

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod JendaLinda 3. 10. 2009 22:02

Mám na serveru nainstalovaný Apache 2.0 a PHP 5.2.10 (Slackware 13.0). Mám problémy s UTF-8. HTML stránky fungují bez problémů. V PHP se UTF-8 konvertuje do ISO 8859-1. Když v souborech odstraním BOMy, tak se nepřekonvertují a zobrazí se správně, ale já potřebuju správně zpracovávat soubory s BOMem. Kde se dá ten převod vypnout? Ve Windows mi to nedělá. Porovnával jsem konfigurační soubory, ale na nic jsem nepřišel.
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod K8 4. 10. 2009 13:37

tenhle dotaz jsem nejak nepochopil - co je v utf-8 a co v iso 8859-1
a proc v 8859-1 kdyz tam neni cestina?
co a jak se v php konvertuje? ("samo" se nic nedela)
K8
Pokročilý

Odeslat příspěvekod JendaLinda 4. 10. 2009 14:33

Stránky jsou v UTF-8, v prohlížeči se znaky s diakritikou zobrazují jako čtverečky. Když v prohlížeči přepnu kódování na ISO 8859-1 nebo ISO 8859-2, tak se zobrazí písmena s čárkama, háčky nejdou.
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod K8 4. 10. 2009 15:07

JendaLinda píše:Stránky jsou v UTF-8, v prohlížeči se znaky s diakritikou zobrazují jako čtverečky. Když v prohlížeči přepnu kódování na ISO 8859-1 nebo ISO 8859-2, tak se zobrazí písmena s čárkama, háčky nejdou.

takže stránky NEJSOU v utf-8 ale v iso 8859-1 coz neobsahuje cestinu, ale je pro zapadni evropu a proto tam jsou jen pismena s carkou, ktera se pouzivaji i leckde jinde a chybi tam hacky, coz je specialita cestiny
K8
Pokročilý

Odeslat příspěvekod JendaLinda 4. 10. 2009 18:45

Soubory fyzicky uložené na serveru jsou v UTF-8, ale do prohlížeče se to dostane se zmršenou diakritikou.
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod K8 4. 10. 2009 19:06

JendaLinda píše:Soubory fyzicky uložené na serveru jsou v UTF-8, ale do prohlížeče se to dostane se zmršenou diakritikou.

tomu moc neverim, kdyby byly v utf8, tak se taky v utf8 zobrazi spravne a ne ze se zobrazi pri nastaveni na iso 8859
K8
Pokročilý

Odeslat příspěvekod gandor 4. 10. 2009 19:19

JendaLinda: Klasicky problem. Zacal si robit v UTF-8 a teraz predpokladas ze vsetko bude v UTF-8... Stranka sa ale mohla skonvertovat uz pri tvoreni suboru -> vsetok kod ktory si do suboru dal, je v CP1250 (tipujem napriek tomu ze vravis ze ISO8859)...
Riesenie je napr. vziat PsPad alebo nejaky iny aspon trosinka inteligentny textovy editor a nastavit kodovanie na UTF-8... Konkretne v PSPade stlacis format-> UTF-8 (ignoruj hacik ktory vravi v akom kodovani by to malo byt) nasledne uloz subor a pozri ci sa to neopravi....
gandor
Mírně pokročilý

Odeslat příspěvekod JendaLinda 4. 10. 2009 23:27

Přece si nevymýšlím blbosti. Soubor je skutečně v UTF-8. Na serveru je PHP soubor uložen v tomto tvaru (tady je to zobrazeno jako Windows-1250):
Kód: Vybrat vše
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Příliš žluťoučký kůň</p>
</body>
</html>
Na začátku je vidět BOM, znaky s diakritikou jsou zapsány vícebajtově - je to UTF-8.
Následně soubor stáhnu ze serveru pomocí wget, tím se vyloučí případný vliv prohlížeče, dostanu tohle (opět zobrazeno jako Windows-1250):
Kód: Vybrat vše
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>P?íli? ?lu?ou?ký k??</p>
</body>
</html>
Výsledek je ale totožný i v prohlížeči. Otazníky jsou opravdu součástí staženého souboru.
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod JendaLinda 9. 10. 2009 20:00

Opravdu se s tímto podivným chováním nikdo nesetkal?
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod kernel_panic [passed] 9. 10. 2009 20:31

prohlídni si konfigurační soubory apache a PHP, hledej AddDefaultCharset a default_charset
k bití internetovejch nihilistů jsem už příliš starej, ale za ty roky mně narostl krunýř, o kterej se vždy báječně rozplácnete; takže, mám zůstat čelem nebo?
kernel_panic [passed]
Přeborník Živě roku 2008
Uživatelský avatar

Odeslat příspěvekod gandor 9. 10. 2009 20:31

Co sa tyka zobrazovania v browsery, tak ti asi chyba ti riadok v hlavicke:
Kód: Vybrat vše
<meta http-equiv="content-type" content="text-html;charset=utf-8" />

ak tam ten riadok mas, tak v nom mas preklep... S takym som sa tiez stretol a lamal si hlavu...
Co mozes skusit na overenie (ze ci mam pravdu) spravit je, ze si otvoris browser a zmenis v nom zobrazovanie na utf-8...
V IE8 sa to robi ze v pravom hornom rohu kliknes na page -> encoding -> utf8...

ps. tvoj obsah suboru sa mi zobrazil dobre po specifikovani, ze ide naozaj o UTF-8... :)
gandor
Mírně pokročilý

Odeslat příspěvekod JendaLinda 10. 10. 2009 08:39

Ukázky, co jsem sem dal, jsou schválně zobrazeny ve Windows-1250, aby byl vidět rozdíl. Server mám doma, mám na něj přístup přes Sambu. První ukázka je původní soubor uložený na serveru, druhá je soubor po stažení ze serveru pomocí wget, v prohlížeči je však výsledek stejný. První ukázka se při přímém otevření v prohlížeči zobrazí správně.

PHP prostě z nějakého důvodu zprzní UTF-8. Písmena s čárkama převede do ISO 8859-1 a háčky nahradí otazníkama. Zajímavé, že starší verze PHP to dělala jenom někdy (náhodně), novější to dělá už pořád. Když v souborech odstraním BOM, tak PHP nepozná, že to je UTF-8 a nezprzní ho.

PHP ve Windows mi tohle nedělá, porovnával jsem obě konfigurace a neviděl jsem žádný rozdíl týkající se kódování. Řádek AddDefaultCharset tam vůbec nemám a default_charset jsem zkoušel nastavovat, ale žádná změna, ve verzi pro Windows ho mám dokonce zakomentovaný a tam to funguje normálně.

Při dalším hledání jsem se dočetl, že používání BOMu v HTML a PHP se obecně nedoporučuje, takže je prostě všude smažu a PHP si nebude diakritiky všímat.
Co můžeš odložit na zítřek, odlož na pozítří.
JendaLinda
Pokročilý
Uživatelský avatar

Odeslat příspěvekod K8 10. 10. 2009 15:41

no tak jeste by mohlo pomoct nastaveni locale - jestli neni ten linux nainstalovan jako nejaky "anglicky" a proto ten prevod na iso8859-1 - php by mohlo brat jazyk prave podle nastaveni celeho systemu, takze lze zkusit hned na zacatek dat php kod
Kód: Vybrat vše
setlocale(LC_ALL, 'cs_CZ.UTF-8');

at BOM - u utf8 by byt nemusel - je to identifikace poradi bajtu, ale v pripade utf8 je jednoznacne dano viz http://www-kiv.zcu.cz/~herout/pruzkumy/ ... dovani.pdf
K8
Pokročilý

Odeslat příspěvekod Waldemar 13. 10. 2009 18:43

Neviem sice ci Ti to pomoze, ci to je aj Tvoj pripad, ale ja som raz mal problem s diakritikou kvoli nejakej funkcii cez ktoru som prehanal text. Ta funkcia mu mrsila diakritiku. Preto ak Ti nefunguju ostatne veci, skus pomocou krokovania pozorne sledovat co sa deje s tym ktorym retazcom, ked prechadza cez jednotlive php funkcie ktore pracuju s retazcami. Proste pozeraj aky text ide do funkcie a v ako tvare a stave z nej vychadza. Ak nepouzivas ladiace nastroje, proste tie funkcie odstav, zakomentuj, a pozri sa ci je ten text vtedy v poriadku. Lebo ja som mal vsetko v UTF, vsetko spravne ponastavovane, od apache cez php, ale ta funkcia, uz si zial nepamatam ktora, ten text aj tak hovadila. Cize vsetko co tym chcem povedat .. urcite zvladaju UTF aj vsetky funkcie cez ktore Ti prechadza ten text s diakritikou? Skus hladat aj tam...
Waldemar
Kolemjdoucí

Odeslat příspěvekod Mareen 13. 10. 2009 19:10

Podle všeho je problém v těch BOMech. PHP má s nima problém a neumí je standardně ignorovat. PHP zkompilovaný s přepínačem enable-zend-multibyte by to mělo zvládnout. Google o tom ví víc.
Mareen
Junior

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků

cron