Chars in XML

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy -

Roy -

17/05/2011 12:26:29
Quote Anchor link
Beste forum leden,

ik ben bezig met het opbouwen van een XML. Gaat prima, maar degene die dit gaat verwerken, Google, gaat er niet mee akkoord. Blijft hangen op bepaalde karakters.
Karakters als bijvoorbeeld ® en ™ willen ze niet hebben.

Nu heb ik geprobeerd met de volgende functies ertussen:
htmlentities($string, ENT_QUOTES, "UTF-8");
utf8_encode($sting);
iconv("UTF-8","UTF-8//IGNORE",$string);

Maar tevergeefs nog niet. Hoe strip ik alle "rare" karakters uit een string?
Onder andere , . / - ( ) mogen blijven.

Alvast bedankt!
Gewijzigd op 17/05/2011 12:28:31 door Roy -
 
PHP hulp

PHP hulp

24/11/2024 09:17:58
 
Kees Schepers

kees Schepers

17/05/2011 12:30:28
Quote Anchor link
En waarom vind Google die karakters niet leuk? waar is het precies voor?
 
Roy -

Roy -

17/05/2011 13:12:51
Quote Anchor link
Google Merchant center, hiermee kunnen producten in Google shopping toegevoegd worden. Ben bezig met een webshop hiermee koppelen.

Van hen krijg ik te horen:
Bepaalde tekens in uw items zijn mogelijk ongeldig. Controleer of de tekens in uw feed geldige tekens voor de geselecteerde codering zijn.

Dit krijg ik te horen bij ® en bij ® waaruit ik op maak dat ze helemaal geen "rare" chars willen hebben.
 
Kees Schepers

kees Schepers

17/05/2011 14:19:04
Quote Anchor link
Hoe ziet je XML eruit?
 
Dave L

Dave L

17/05/2011 14:58:28
Quote Anchor link
Ik had hetzelfde probleem bij het importeren van scv gegevens uit een heel oud dos programma en het hierna renderen van XML documenten via php.

Opgelost middels de waardes te strippen met het volgende:
preg_replace("/[^a-zA-Z0-9-\s]/", "",$stringvariabele);

® is bijvoorbeeld ö ofzo ( weet ik niet zeker )

XML breekt bij aantreffen van ® of ™ etc..

Nadeel van deze oplossing is dat je tekens dan gewoon verdwijnen uiteraard, maar in mijn geval waren dat dus 10 patient namen waarvan een ö ofzo mistte van de 6100 in totaal. Nog te overzien dus.
Gewijzigd op 17/05/2011 14:59:40 door Dave L
 
Kees Schepers

kees Schepers

17/05/2011 15:09:23
Quote Anchor link
Inderdaad, met een ^ teken in een character class [] defineer je gewoon alle karakters die niet mogen voorkomen in je replace. Word er dus uitgesloopt. Maar ik ben toch eens benieuwd naar de XML.
 
Roy -

Roy -

17/05/2011 16:31:09
Quote Anchor link
Inmiddels alle fouten opgevangen en deze toegevoegd met als resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
function convertxml($tekst){    
    $tekst = secure($tekst);
    $tekst = str_replace("&reg;", "", $tekst);
    $tekst = str_replace("&trade;", "", $tekst);
    $tekst = str_replace("&plusmn;", "", $tekst);
    $tekst = str_replace("&rdquo;", "", $tekst);
    $tekst = str_replace("&iuml;", "", $tekst);
    $tekst = str_replace("&bull;", "", $tekst);
    $tekst = str_replace("&ordm;", "", $tekst);
    $tekst = str_replace("&Omega;", "", $tekst);
    $tekst = str_replace("&sup2;", "", $tekst);
    $tekst = str_replace("&eacute;", "", $tekst);
    $tekst = str_replace("&acute;", "", $tekst);
    $tekst = str_replace("&euml;", "", $tekst);
    $tekst = str_replace("&rsquo;", "", $tekst);
    $tekst = str_replace("&times;", "", $tekst);
    $tekst = str_replace("&ldquo;", "", $tekst);
    $tekst = str_replace("&deg;", "", $tekst);
    $tekst = str_replace("&ndash;", "", $tekst);
    $tekst = str_replace("&Oslash;", "", $tekst);
    $tekst = str_replace("&egrave;", "", $tekst);
    $tekst = str_replace("&lsquo;", "", $tekst);
    $tekst = str_replace("&Prime;", "", $tekst);
    $tekst = str_replace("&uuml;", "", $tekst);
    return $tekst;
}

?>


Zodra er weer een xml fout is wordt deze naar me toe gemaild en kan ik deze aan dit lijstje toevoegen.

Klein stukje uit de XML, paar linkjes weg gehaald:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>*** - Product export xml</title>
<link rel="self" href="http://www.***.nl/"/>
<updated>2011-05-17</updated>
<author>
<name>***</name>
</author>
<entry>
    <title>Asus Booksize S1-AT5NM10E</title>
    <g:brand>Asus</g:brand>
    <g:condition>new</g:condition>
    <summary>S1-AT5NM10E - Intel Atom D525 (1M Cache, 1.80 GHz), Intel NM10, 2 x DIMM DDR3 max. 4GB, 1 x PCI-e x 1, NVIDA ION II GT218, 2 x SATA II, Gigabit Ethernet, WLAN 802.11 b/g/n, IR, BT, Realtek ALC887 8 Ch., 65W</summary>
    <id>1</id>
    <g:image_link>http://***/img/norm/high/5846092-2450.jpg</g:image_link>
    <link href="http://www.***.nl/new/index.php&#63;p=product&amp;id=1"/>
    <g:mpn>90PBB1AD010011AGCEZ</g:mpn>
        <g:availability>out of stock</g:availability>
        <g:online_only>n</g:online_only>
    <g:price>212.80</g:price>
    <g:product_type>Elektronica &gt; Computers</g:product_type>
    <g:quantity>0</g:quantity>
    <g:shipping>
        <g:country>NL</g:country>
        <g:service>TNT Post</g:service>
        <g:price>7.50</g:price>
    </g:shipping>
    <g:shipping>
        <g:country>NL</g:country>
        <g:service>TNT Rembours</g:service>
        <g:price>17.00</g:price>
    </g:shipping>
</entry>
</feed>


En zo zijn er zo'n 5000 producten.

Bedankt voor de reactie's!
 
Kees Schepers

kees Schepers

17/05/2011 16:46:12
Quote Anchor link
En als je de node met speciale karakters in een CDATA element zet? Misschien dat speciale karakters dan wel werken :)
 
Dave L

Dave L

18/05/2011 01:25:01
Quote Anchor link
Kees Schepers op 17/05/2011 16:46:12:
En als je de node met speciale karakters in een CDATA element zet? Misschien dat speciale karakters dan wel werken :)


Bij mij stond alles ook in CDATA, helaas brak de xml dus hier ook op 'excentrieke' karakters...
 
Wouter J

Wouter J

18/05/2011 08:04:35
Quote Anchor link
Waarom zo vaak str_replace? Je kan dit makkelijk in 1 functie doen met arrays: http://snipplr.com/view/45786/strreplace-met-arrays/
 
Kees Schepers

kees Schepers

18/05/2011 10:32:09
Quote Anchor link
Wat voor melding krijg je van Google bij die foute tekens?
 
Roy -

Roy -

18/05/2011 11:28:12
Quote Anchor link
Ook met cdata wil het niet. De oplossing met de str_replace gaat prima. Array hiervoor gebruiken is mogelijk, maar goed het werkt nu ook.

Van Google krijg ik (zoals eerder aangegeven):
Bepaalde tekens in uw items zijn mogelijk ongeldig. Controleer of de tekens in uw feed geldige tekens voor de geselecteerde codering zijn.

Hierbij wordt aangegeven dat hij bijv. geen ® of &reg; wil hebben.
 
Dave L

Dave L

19/05/2011 12:25:41
Quote Anchor link
En zo is het maar net. Gewoon alle niet-xml-geldige karakters eruit slopen, OF vervangen.

Op dit moment ben ik een functie aan het schrijven die de karakters tevens netjes vervangt.

Björn -> Bjorn
Karel & zonen -> Karel en zonen

Wel redelijk heftig in een while loop met veel database rijen, maar och...!
Gewijzigd op 19/05/2011 12:27:54 door Dave L
 
Pim -

Pim -

19/05/2011 13:34:41
Quote Anchor link
Vreemd... Als je het in een CDATA node stopt en je XML UTF-8 gecodeerd is, zouden er geen problemen moeten voordoen.
PHP DOM escaped als het goed is alles zelf. Lukt het daar niet gewoon mee? (Wel in een CDATA veld stoppen)
 
Dave L

Dave L

19/05/2011 17:38:46
Quote Anchor link
Nope. Weet niet waarom, maar dit werkte bij mij niet :(

UTF-8 codering...

Wat problemen gaf:
print("<cell><![CDATA[".$row['PatNaam'])."]]></cell>");

Tijdelijke oplossing:
print("<cell><![CDATA[".preg_replace("/[^a-zA-Z0-9-\s]/", "",$row['PatNaam'])."]]></cell>");
Gewijzigd op 19/05/2011 17:39:26 door Dave L
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.