Autor Zpráva
P3tr
Profil
Ahoj,
potreboval bych poradit s nasledujicim problemem.
Stahuji html stranku z http serveru s pouzitim php socketu nebo funkci curl modulu, oboji mi vraci stejny vysledek a to:
v kodu html stranky jsou html entity nahrazeny jednobajtovymi znaky, jedna se o &scaron zamenen za 'a' a &Scaron zamenen za '`'.
Typ stranky je text/html.
Kodovani je utf-8.
V originale jsou ve strance misto znaku š a Š html entity, u ostatnich znaku vcetne znaku s diakritikou nebyly html entity pouzity.
Mam dojem ze se php interne pokousi ve stringu prevest html entitu na dvoubajtovy utf znak a nekde dropne prvni bajt a tim se vysledny znak neinterpretuje spravne. Nemam zapnuto zadne filtrovani vstupu, vystupu (mbstring).

Pro priblizeni znazornim priklad:
Z http serveru stahuji potrebnou html stranku 'test.html', ktera obsahuje mimo jine nasleduji kod :
...
<input maxlength="30" name="Ulice:" value="&Scaron;vandova">
<input maxlength="30" name="Keř:" value="&scaron;eřík">
...
Pro ziskani html stranky jsem pouzil nasleduji kod:

$fp = fsockopen($host,$port, $errno,$errstr, 30); //otevreni spojeni s http serverem
if (!$fp) { echo "error: $errno, $errstr\n"; exit; }
fwrite($fp,$request,strlen($request)); //zaslani http requestu
while (!feof($fp)) { $data .= fgets($fp, 128); } //nacteni contentu do bufferu $data
fclose($fp);

Nyni, kdyz si vypisu promennou $data (zkousel jsem i primo zapsat do souboru), obsahuje oproti originalu nasledujici:
...
<input maxlength="30" name="Ulice:" value="`vandova">
<input maxlength="30" name="Keř:" value="aeřík">
...
Zkousel jsem ruzne verze php: 5.04, 5.05, 5.1.1, dokonce i php 6.0-dev na systemech Linux, Windows,
zmeny nastaveni locales, i nastaveni interniho kodovani v php.ini (netusim jestli to ma vubec vliv),
bohužel beze změn.

Pokud nekdo tusite, v cem muze byt problem nebo znate reseni,
dost by mi to pomohlo.
Diky.
Petr
Toto téma je uzamčeno. Odpověď nelze zaslat.

0