Skip to main content

Hoe krijg ik die rare tekens weg

Elke feed heeft een specifiek karakter codering. Als in de keten van het maken van de feed, het opsturen van de feed, ophalen van de feed, het parsen, het in de database zetten en het uiteindelijk weergeven in joomla iets fout gedaan wordt krijg je rare tekens waar umlauts of andere niet standaard tekens staan.

 

PHP4

Onder php4 is de automatische detectie van de codering door de parser niet goed, dat is een probleem van php en kan niet opgelost worden. Daarom wordt voor php4 de te verwachten codering altijd op UTF-8 gezet. Als de codering van de feed afwijkt (daisycon) (en dan is het meestal ISO-8859-1) moet je dat handmatig instellen in het feeds menu.

Codering CSV Bestanden

CSV bestanden bevatten geen coderings informatie. Hier moet je bij de aanbieder 'ISO-8859-1' als codering van de feed instellen, of ook hier 'Auto encoding' uitzetten en bij 'Encoding' 'UTF-8'

 

 

 

 

Dubbel codering / foute codering

Sommige feeds zijn dubbel gecodeerd, bij het maken van de feed zijn gegevens in UTF-8 nogmaals als UTF-8 gecodeerd of UTF-8 gecodeerde data gaat als ISO-8859-1 de deur uit. Het laatste probleem is vaak op te lossen door de codering handmatig op UTF-8 te zetten. Een dubbele codering door gebruik te maken van een callback functie:

{include_code_listing /var/www/www.affiliatefeeds.nl/images/code/dubbelutf8-32.txt}

Deze functie wordt meegeleverd met de compoment  Staat in administrator/components/com_datafeeds/cron  feeds-example.php of reeds in feeds.php.

En in de instellingen van de feed gebruik je dan dubbelutf8_cb in plaats van generic_cb.

XML character entity referenties

Er zijn een aantal feeds die speciale karakters coderen als html_entity, dit is op zich correct maar onnodig in XML.

Daarnaast zijn er feeds die html entity's ook weer url encodere, dat kan fout zijn

Het levert problemen op als de tekens in de menu's terecht komen. Gebruik html_entity_decode om dit op te lossen.

{include_code_listing /var/www/www.affiliatefeeds.nl/images/code/amp_html_entity-32.txt}

Vanaf versie 384 worden html entities van geselecteerde velden m.u.v. de description standaard gecodeerd naar ISO/UTF-8.

{include_code_listing /var/www/www.affiliatefeeds.nl/images/code/html_entity_decode-32.txt}

 

 

 

 

 

Andere problemen

Met name php 4 ondersteund (de)codering niet goed. En sommige feeds werken dan ook nog eens niet mee. Een voorbeeld:

de summum/baobab feeds gebruiken  & #235; voor ë ( dit ipv & euml;). De entity zou je met html_entity_decode() moeten kunnn converteren. Met php 5 gaat dat prima. Helaas niet met php 4. Hier werkt iets als :

preg_replace('~&#([0-9]+);~e', 'chr("\\1")',$string);

 

Zie ook function.html-entity-decode.php