Portál AbcLinuxu, 12. května 2025 10:40

Dotaz: PHP a CURL mění tvrdé mezery

5.8.2010 16:23 Urso
PHP a CURL mění tvrdé mezery
Přečteno: 1461×
Odpovědět | Admin
Příloha:

Zdravím, mám problém se stažením kódu jiné stránky pomocí CURL. Při načtení jiné stránky v kódování win-1250 pomocí CURL a její začlenění do stránky kódované jako UTF-8 mi to tvrdé mezery ( ) načte jako nesmyslné znaky (?), viz ukázka kódu:

$dotaz = "http://www.neco.cz/?kod=3"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $dotaz); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // vystup do promenne if (($buff = curl_exec($ch)) === false) { echo "Chyba: "; } else { } curl_close($ch); $buff = wintoutf8($buff); echo $buff; Nevíte někdo jak to vyřešit?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.8.2010 17:20 zulu
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z toho kódu, ale nepoznáme co a jak převádíš a přiložený obrázek sám o sobě je v pořádku.
5.8.2010 23:48 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opravdu sis ověřil, že to CURL stáhne dobře - že v tom co stáhne, ty tvrdé mezery ještě jsou? Já si totiž myslím, že tam budou, že CURL funguje správně a že problém bude ve funkci wintoutf8.
6.8.2010 08:38 Urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Když funkci WINTOUTF8() vypnu, tak je výsledek stejný, pouze čeština ukazuje paznaky.
6.8.2010 09:29 chrono
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Skús sem vložiť (ako prílohu) textový súbor, v ktorom bude to číslo aj s tým znakom v pôvodnom kódovaní.
6.8.2010 10:27 Urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
To zpracovává cizí cgi script přes VPN, k tomu nemám přístup.
6.8.2010 10:45 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Bylo myšleno spíše, vložit sem obsah $buff bez jakékoliv další úpravy, jako bez prohnání wintoutf8() apod.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 09:34 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemyslím si že chyba je v CURL, ale není možné, že server, ze kterého taháte se rozhoduje co pošle např. podle useragenta a pošle ty čísla jinak formátované?, bo na obrázku nesmyslný znak nevidím :)
To by pak mohlo pomoci např:
curl_setopt($ch,CURLOPT_USERAGENT','Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.0');
Pokud teda to neprasí wintoutf8().
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 10:25 Urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Tak tohle nepomáhá. Zajímavé je, že pokud ve FireFoxi dám zobrazení->znaková sada->windows 1250 tak oddělovač tisíců v čísle je správně, ale ne jako tvrdá mezera   ale jako normální mezera (císlo 20 hexadec., 32 dec.).
6.8.2010 10:52 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Uložte obsah $buff (pomocí fopen,fwrite) do souboru bez wintoutf8() a případně do druhého souboru po wintoutf8() a připojte je sem jako přílohu.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 11:56 Urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Příloha:
Dobrý nápad, jsem to udělal a cpe tam hex. A0 znak. Takže jsem to vyřešil takto:
$buff = str_replace(chr(160), " ", $buff, $pocet);
Ale stejně nevím proč to dělá, nemá to logiku. Dávám soubor do přílohy.
6.8.2010 12:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Jste si jistý, že přiložený soubor je $buff bez jakékoliv úpravy (ten co je vrácen přímo z CURL), bo různé diakritické znaky jsou nahrazeny stejnou sekvencí 3bytů.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 13:58 urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Příloha:
Ten přiložený soubor jsem zkrátil. A opravdu všechny znaky A0 se přepsaly na EF BF BD. Tak ho posílám znovu bez úpravy. Tu tvrdou mezeru (nbsp;) tam chci, proto to str_replace (výměna A0 za mezeru).
6.8.2010 14:35 urso
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
A ještě jsem prozkoumal win-1250 kódování a tím se mi rozsvítilo. A0 je v kódování win-1250 tvrdá mezera (ovšem v prostém textu). V (X)HTML se dává 6 znaků (&)nbsp; v libovolném kódování. Podle mi zadaných informací by v tom HTML výstupu měla být tvrdá mezera, což jsem předpokládal (&)nbsp; . A to byl chybný předpoklad, bylo tam to A0, což se mi vždy po uložení v prohlížeči změnilo na EF BF BD. Tím tuto problematiku považuji za vyřešenou a děkuji všem zůčastněným za pomoc.
6.8.2010 15:30 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Ano toto již vypadá normálně to je čisté Windows-1250 kódování.
Takže soubor $buff stačí lehce převést pomocí fce iconv() na utf-8 a je to.
No a pokud tam potřebujete i no-break-space, tak bych to asi upravil na
$buff = str_replace(chr(160), " ", $buff);
před konverzí do utfk-ka.
Ale fce iconv() naprosto normálně i tuto mezeru převádí z windows-1250 do utf-8, takže jak bylo psáno na začátku, kazí to fce wintoutf8, kdoví co vůbec dělá.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 17:43 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
Sorry, špatně jsem zapsal html entitu, oprava:
$buff = str_replace(chr(160), " ", $buff);
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2010 13:03 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP a CURL mění tvrdé mezery
K čemu ten str_replace? Chcete tam teda ty nedělitelné mezery, nebo ne?

V příloze je to nějaké zmršené - jsou tam znaky ef bf bd, což bude asi nějaký zástupný symbol.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.