Zadejte hledaný výraz...

Zpracování XML ve Windows-1250

Vít Jurásek
verified
rating uzivatele
(56 hodnocení)
26. 6. 2008 11:11:06
Zdravím, mám vzdálené XML uložené ve Windows-1250 a potřebuju ho rozparsovat a uložit do DB (používám UTF-8). Zkouším interní SAX parser z PHP, ale ten nepodporuje CP-1250.
Zkouším tedy soubor číst, pomocí iconv konvertovat do utf a pak parsovat, ale narážím na chyby, se kterýma si nejsem schopen poradit.
setlocale(LC_CTYPE, 'cs_CZ');
$parser=(xml_parser_create(''));
xml_set_character_data_handler($parser, "znaky");
xml_set_element_handler($parser, "obsluhapocatecnihotagu", "obsluhakoncovehotagu");
iconv_set_encoding ( 'input_encoding', 'windows-1250');
iconv_set_encoding ( 'output_encoding', 'utf-8');
iconv_set_encoding ( 'internal_encoding', 'utf-8');
if(!($soubor = fopen("data.xml", "r"))) {
die("Nelze otevřít soubor data.xml!");
} else {
while ($d = fread($soubor, 4096)) {
$d= iconv('windows-1250','utf-8//IGNORE',$d);
if(!xml_parse($parser, $d, feof($soubor))) { die("Chyba XML"); }
}
Ať s tím pokuju jak chci, tak se mi dostává pouze odpovědi:
Warning: xml_parse() : Bytes: 0x98 0x65 0x6B 0x61 in /pub/...../www/test/test2.php on line 95
Warning: xml_parse() : input conversion failed due to input error in /pub/..../www/test/test2.php on line 95
Na řádku 95 je
if(!xml_parse($parser, $d, feof($soubor))) { die("Chyba XML"); }
Poradíte prosím, v čem by mohla být chyba?
Díky moc za každý tip. Případně pokud někdo máte nějaký inteligentnější parser, který by si poradil s tímto kódováním a zároveň s XML o rozměru 40MB, budu moc vděčný!
26. 6. 2008 11:11:06
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86942
lukaspulda
verified
rating uzivatele
(24 hodnocení)
26. 6. 2008 11:21:03
iconv('windows-1250','utf-8//IGNORE',$d);
mi nikdy nefungovalo ... zkusil bych spíše místo windows-1250 dát CP1250
26. 6. 2008 11:21:03
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86941
co takto skusit na 2. riadku $parser=(xml_parser_create('UTF-8'));
Podobny problem som mal aj ja, ale s inym XML parserom... a problem bol v kodovani UTF-8. PHP s nim nevie tak uplne korektne pracovat. Preto by som mozno skusil najskor rozparsovat XML s inym kodovanim a az vo finale to previest do UTF-8.
mozno ze pomoze:
http://bugs.php.net/bug.php?id=43347
http://www.mombu.com/php/functions-forum/t-40762-xml-parser-failed-to-parse-mixed-coding-file-1069392.html
26. 6. 2008 11:23:06
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86940
Vít Jurásek
verified
rating uzivatele
(56 hodnocení)
26. 6. 2008 11:26:58
Napsal lam1t0;75656
co takto skusit na 2. riadku $parser=(xml_parser_create('UTF-8'));
To jsem zkousel, bohuzel stejne chovani
Napsal lam1t0;75656
Podobny problem som mal aj ja, ale s inym XML parserom... a problem bol v kodovani UTF-8. PHP s nim nevie tak uplne korektne pracovat. Preto by som mozno skusil najskor rozparsovat XML s inym kodovanim a az vo finale to previest do UTF-8.
mozno ze pomoze:
http://bugs.php.net/bug.php?id=43347
http://www.mombu.com/php/functions-forum/t-40762-xml-parser-failed-to-parse-mixed-coding-file-1069392.html
Díky, mrknu se na to...
26. 6. 2008 11:26:58
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86939
Nejako matne si spominam, ze moj problem bol v tom, ze tvorca xml, don vlozil chyne znaky. A to sposobilo nemoznost rozparsovat. Byt tebou, uplne na zaciatok skusim nejaky validator. Ci je to XML vobec validne,... mozno nie je chyba na tvojej strane
26. 6. 2008 11:33:13
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86938
Není problém v
$parser=(xml_parser_create(''));
http://cz2.php.net/manual/en/function.xml-parser-create.php
If empty string is passed, the parser attempts to identify which encoding the document is encoded in by looking at the heading 3 or 4 bytes.
K tomu se, zdá se, vztahuje ta první chybová hláška. Co kdybys nastavil charset ručně?
26. 6. 2008 11:52:42
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86937
nezapomen uvest definici charsetu uz ve zdrojovem XML
26. 6. 2008 11:58:51
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86936
Vít Jurásek
verified
rating uzivatele
(56 hodnocení)
26. 6. 2008 12:27:08
Napsal rammi;75675
nezapomen uvest definici charsetu uz ve zdrojovem XML
Ahoj, na začátku je:
26. 6. 2008 12:27:08
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86935
Vít Jurásek
verified
rating uzivatele
(56 hodnocení)
26. 6. 2008 12:29:03
Napsal Retal;75672
Není problém v
$parser=(xml_parser_create(''));
http://cz2.php.net/manual/en/function.xml-parser-create.php
K tomu se, zdá se, vztahuje ta první chybová hláška. Co kdybys nastavil charset ručně?
Ahoj, pokud zkusím
$parser=(xml_parser_create('UTF-8'));
dopadnu úplně stejně :-(
26. 6. 2008 12:29:03
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86934
V diskusi pod funkcí je další možné úskalí:
If you want to sure that PHP treats an UTF-8 encoded file correctly, make sure that it begins with the coresponding 3 byte BOM header (0xEF 0xBB 0xBF)
26. 6. 2008 12:39:16
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86933
Vít Jurásek
verified
rating uzivatele
(56 hodnocení)
26. 6. 2008 12:47:20
Napsal Retal;75694
V diskusi pod funkcí je další možné úskalí:
Skript mi BOMem začíná, datový soubor nemůže, protože není v UTF, ale ve Win-1250.
Nicméně já tomu parseru už předkládám data v proměnné, které jsou překódovány do UTF, takže by to tedy s BOMem v datovém souboru nemělo souviset (alespoň myslím, teda já už radši nemyslím, ... to je zase den :-) )
26. 6. 2008 12:47:20
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86932
ziki
verified
rating uzivatele
23. 9. 2009 13:01:52
zdravím, vyřešili jste to nakonec nějak ? Trápím se tu s úplně stejnou věcí, XML ve Windows-1250 uložit do databáze v UTF a už mi z toho šedivějí vlasy :-(
23. 9. 2009 13:01:52
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86931
Dolphi
verified
rating uzivatele
(28 hodnocení)
23. 9. 2009 14:34:09
Napsal ziki;366015
zdravím, vyřešili jste to nakonec nějak ? Trápím se tu s úplně stejnou věcí, XML ve Windows-1250 uložit do databáze v UTF a už mi z toho šedivějí vlasy :-(
file_put_contents("fileUTF.xml", iconv ("CP1250", "UTF-8", file_get_contents("fileWIN.xml")));
23. 9. 2009 14:34:09
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86930
$xml = simplexml_load_file(http://www.nekde.cz/neco.xml))
$xml = iconv('Windows-1250','UTF-8', $xml);
a po pripojeni do db zadat prikaz mysql_query("SET NAMES utf8") nebo tak nejak :) + mit v utf8 i tabulky v databazi.
23. 9. 2009 15:00:24
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86929
Napsal Dolphi;366081
file_put_contents("fileUTF.xml", iconv ("CP1250", "UTF-8", file_get_contents("fileWIN.xml")));
Ahoj,
výše uvedené řešení nefunguje, pokud je v xml souboru explicitně nastaveno kódování na Windows-1250. Parser pak očekává právě ono cp1250 a místo toho mu chodí UTF-8. Proto nadává.
20. 10. 2009 15:34:17
https://webtrh.cz/diskuse/zpracovani-xml-ve-windows-1250#reply86928
Pro odpověď se přihlašte.
Přihlásit