A PHP, latin2 charset és az XML esete
Sziasztok,
Egy ideje már görcsölök vele, de egyszerűen nem találok megoldást arra hogy egy olyan, egyszerű XML parsert írjak, ami kb. ugyanúgy megy PHP4 és PHP5 alatt is. Amit eddig alkottam (xml_parser függvényeket használva), viszonylag szépen megy PHP4 alatt, leszámítva hogy (számomra) véletlenszerű helyeken darabolja magát a tagokkal körülvett tartalmat, például:
rss\channel\item\link
Contents: http://prohardve
Contents: r.hu/c.php?mod=10
Contents: &
Contents: id=24038
end of link
(Most ahogy elnézem, túlnyomórészt & és ' körül vagdal.)
Ellenőriztem a forrás XML fájlt, és ott teljesen rendben, egyben van ez a link, a PHP4|5 pedig valamiért szétdarabolja. Ezt éppen meg lehet oldani könnyen, de nem vagyok benne biztos hogy ennek így kellene működnie.
A másik (fő) gond, hogy (csak) PHP5 alatt, bármit is csinálok, nem tudom rávenni hogy iso-8859-2 karakterkészletű kimenetet adjon. Se a hagyományos xml_parser fügvényekkel, se az XMLReader-el, se SimpleXML-el. Amint átállítom a headert, hogy UTF-8 tartalmat akarok megjeleníteni, egyből megjavul, legalábbis az ékezetes része.
Próbáltam iconv(), mb_convert_encoding() függvényeket is, sajnos egyik sem működött, és emiatt nem módosítanék sok sok oldalt UTF-8-ra, (adatbázisról nem is beszélve) ha nem muszáj.
Nagyra értékelném a segítséteket és a konstruktív hozzászólásokat az ügyben.
Előre is köszönöm!
■ Egy ideje már görcsölök vele, de egyszerűen nem találok megoldást arra hogy egy olyan, egyszerű XML parsert írjak, ami kb. ugyanúgy megy PHP4 és PHP5 alatt is. Amit eddig alkottam (xml_parser függvényeket használva), viszonylag szépen megy PHP4 alatt, leszámítva hogy (számomra) véletlenszerű helyeken darabolja magát a tagokkal körülvett tartalmat, például:
rss\channel\item\link
Contents: http://prohardve
Contents: r.hu/c.php?mod=10
Contents: &
Contents: id=24038
end of link
(Most ahogy elnézem, túlnyomórészt & és ' körül vagdal.)
Ellenőriztem a forrás XML fájlt, és ott teljesen rendben, egyben van ez a link, a PHP4|5 pedig valamiért szétdarabolja. Ezt éppen meg lehet oldani könnyen, de nem vagyok benne biztos hogy ennek így kellene működnie.
A másik (fő) gond, hogy (csak) PHP5 alatt, bármit is csinálok, nem tudom rávenni hogy iso-8859-2 karakterkészletű kimenetet adjon. Se a hagyományos xml_parser fügvényekkel, se az XMLReader-el, se SimpleXML-el. Amint átállítom a headert, hogy UTF-8 tartalmat akarok megjeleníteni, egyből megjavul, legalábbis az ékezetes része.
Próbáltam iconv(), mb_convert_encoding() függvényeket is, sajnos egyik sem működött, és emiatt nem módosítanék sok sok oldalt UTF-8-ra, (adatbázisról nem is beszélve) ha nem muszáj.
Nagyra értékelném a segítséteket és a konstruktív hozzászólásokat az ügyben.
Előre is köszönöm!
minek?
PHP5 DOM sem nyerő
This applies even if you're generating an XML document which is not ultimately in utf8.
iconv vagy mb_string
Bamba vagyok
Másodjára (és kicsit pihentebben) nekifutva már működik a dolog, rossz oldalról közelítettem meg, ugyanis magát a bemenő adatot konvertáltam, de ami átmegy az xml parseren az UTF-8-ba kerül.
Az első kérdésem még mindig él.
Ceriak: visszatérve az első kérdésedre, funkciókat tekintve egyelőre elég lesz az xml_parser-es megoldás, ez legalább verziófüggetlen, év vége után (megszűnik a PHP4 support dec. 31-től) meg hátha át tudnának sokan állni PHP5-re, legalábbis én reménykedek.
Épp fordított probléma
Nekem is hasonló jellegű gondom támadt, csak éppenséggel fordított irányú. Amenyiben nem ez a megfelelő hely e komment céljára akkor kérem a moderátort hogy tegye át
A 8859-2 kódlapú XML dokumentumot szeretnék feldolgozni és az eredményt adatbázisba vinni. Szerencsétlenségemre a kapott XML séma és dukumentum telistele van magyar ékezetes betűket tartalmazó címkékkel.
Biztos vagyok benne hogy valmami PHP specifikus beállítás rosz mivel a (rendkívűl egyszerű) példafájl és kód amit az eredeti dokumentummal történt több óra kínlódást követően hoztam létre, bizonyosan jó.
Hol foghatnék neki annak hogy kiederítsem, hogy mért nem akarja feldolgozni/bejárni a dokumentumot? És miért lehet az hogy az error_reporting = E_ALL opció ellenére nem kapok semmi hiba üzenetetüzenetet? A komment jelet természetesen mindkét esetben kivettem és az apache szolgáltatást újraindítottam, majd később a gépet is...
Ja és arra is gondoltam hogy mi lenne ha az XML fájl kódolást változtatnám meg értelemszerűen annak megfelelően ahogy a karakterkódolást állítgatom de eredmény nélkül.
Kérlek segítsetek megfejteni nekem hogy mi lehet a hiba oka. Köszönöm szépen.
display_errors
Megoldás!
Így már sikerült bemérni a hibát. Annak oka nagyon egyszerű: a PHP simplexml kiterjesztése ezekszerint (windows alatt) file szinten nem tudja kezelni az ékezeteket. Ugyanis:
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "példaadat.xml" in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\teszt.php on line 10
Ám ha a filet átírom 'peldaadat.xml'-re akkor minden rendbevan. Köszönöm még1* a javaslatot.
Még csak annyi kérdésem volna, hogy szerintetek ez egy hiba és jelenteni kellene a fejlesztőknek vagy a "normál" működés része hogy nem kezeli az ékezetet?