Hallo,

Ik heb een stukje script dat de XML feed van tweakers ophaalt. Deze wil ik door de xml parser van PHP halen om er verder mee te werken. Echter, bijzondere karakters als äáàã en dergelijke worden niet correct omgezet.

Zo maakt de reader van ë het volgende: ë

Heb al geprobeerd om de output charset van de reader te veranderen (UTF8 en ISO-8859-1) maar dit mocht niet baten.

Dit probleem heb ik alleen op mijn webhost (linux) en niet op mijn eigen PC (Windows), ook werkt het goed op de webhost van een vriend (linux).
Wat kan ik hieraan doen?

Derk

Mijn stukje code:
<?php
$config['RSS_feed']='http://feeds.feedburner.com/tweakers/mixed';
$config['Charset']='UTF-8';
$xml_feed = file_get_contents($config['RSS_feed']);
$xml_praser = xml_parser_create($config['Charset']);
xml_parser_set_option($xml_praser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml_praser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($xml_praser,$xml_feed,$xml_inh,$xml_tags);  
xml_parser_free($xml_praser);
?>
Ik mag aannemen dat je met die $config['Charset']='UTF-8'; ook al hebt gespeeld?
klopt. Ik heb enkel de karaktersets geprobeerd die hier beschreven staan:
http://nl2.php.net/html_entity_decode
Sommigen herkent de XML reader helemaal niet. De 2 best werkende waren UTF-8 en ISO-8859-1. Echter lossen deze mijn probleem niet op.

Ook niks invullen had geen resultaat, volgens de handleiding bedenkt PHP dan zelf welke hij moet gebruiken. Aangezien UTF-8 bovenaan de feed aangegeven word denk ik dat hij die dan pakt, en daar komt dus niet het goede resultaat uit.

Tevens heb ik geprobeerd alle bijzondere karakters om te zetten met htmlentities. Alleen als ik dit doe stopt de parser bij het eerste bijzondere karakter met parsen....

Derk
htmlentities is denk ik niet de goeie functie daarvoor. Je zou het handmatig kunnen proberen, dan moet je even de bijbehorende charset opzoeken op wikipedia bijvoorbeeld.
Ik heb het nu ook geprobeerd met:
get_html_translation_table(HTML_ENTITIES);
en dan eerst de <>&'" karakters (en de spatie) er uit halen, zodat alleen de echt bijzondere karakters overblijven.
Ook nu stopt de parser bij het eerste bijzondere karakter die hij tegen komt.

Scriptje dat ik dan heb toegevoegd:
<?php
$trans_tbl=get_html_translation_table(HTML_ENTITIES);
unset($trans_tbl['\'']);
unset($trans_tbl['"']);
unset($trans_tbl['`']);
unset($trans_tbl['&']);
unset($trans_tbl[html_entity_decode('&nbsp;')]);
unset($trans_tbl['<']);
unset($trans_tbl['>']);
$xml_feed=strtr($xml_feed, $trans_tbl);
?>


Op de volgende URL is de uitkomst van het scriptje te zien. Ik heb hier eerst $trans_tbl geprint en daarna $xml_inh (deze laatste is dus de uitkomst van de parser en de eerste zijn de karakters die hij vervangt).
http://www.vedelaar.nl/a.php

Zoals je ziet werkt dit ook niet, hij stopt bij de eerste bijzondere karakter die hij tegen komt.

Derk
Ik heb het antwoord dan eindelijk gevonden, en voor degene met dit zelfde probleem en de zoekmachine gebruiken:

Door het volgende toe te voegen kreeg ik normale karkters:
$xml_feed=utf8_decode($xml_feed);

Derk

Reageren