[MySQL] Characters ongeldig in XML

Pagina: 1
Acties:

  • Epitome
  • Registratie: Augustus 2000
  • Laatst online: 17-02 16:12
(jarig!)
Middels PHP wordt een XML-bestand gemaakt die gegevens haalt uit een MySQL-database.

Echter staan er in de MySQL database records die ervoor zorgen dat de XML stopt, er zit een character in dat niet wordt geaccepteerd.

Als ik in Firefox de XML bekijk dan zie ik dat er een probleem is met een character.

Kijk ik dan met PHPMyAdmin naar dat veld van die bepaalde record, dan zie ik er niets mis mee.

Als ik dan echter het bepaalde veld in die record aanpas door dezelfde inhoud handmatig over te typen, dan werkt het weer wel.

Zijn er bepaalde characters die niet worden weergegeven in PHPMyAdmin, maar niet door XML worden geaccepteerd? En zo ja, hoe kan ik in PHP dat probleem verhelpen?

P.S. Het is een grote database dus het liefst ga ik niet alles handmatig aanpassen.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Er is een hele waslijst karakters die niet zomaar kaal in een xml node mogen verschijnen. Google kan daar vast meer over vertellen.

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 26-01 16:18
Het gaat misschien om characters als ü en é.
Gooi de informatie die je echood even door htmlspecialchars() en/of htmlentities().

Of zet CDATA tags om de informatie:

<![CDATA[".$value."]]>

Wat tussen deze tags staat wordt gezien als character data en dus niet geparsed door de xml-parser van je browser (of andere applicaties).

[ Voor 57% gewijzigd door Timer op 08-05-2006 17:14 ]


  • Epitome
  • Registratie: Augustus 2000
  • Laatst online: 17-02 16:12
(jarig!)
Gert schreef op maandag 08 mei 2006 @ 10:31:
Er is een hele waslijst karakters die niet zomaar kaal in een xml node mogen verschijnen. Google kan daar vast meer over vertellen.
Maar als ik dat character niet zie in PHPMyAdmin weet ik ook niet waar ik naar moet zoeken.
TheTimer schreef op maandag 08 mei 2006 @ 10:34:
Het gaat misschien om characters als ü en é.
Gooi de informatie die je echood even door htmlspecialchars() of htmlentities().

Of zet CDATA tags om de informatie:

<![CDATA[".$value."]]>

Wat tussen deze tags staat wordt gezien als character data en dus niet geparsed door de xml-parser van je browser (of andere applicaties).
htmlspecialchars gebruik ik al, maar CDATA ga ik eens proberen. Bedankt voor de tip!

[ Voor 51% gewijzigd door Epitome op 08-05-2006 10:42 ]


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Epitome schreef op maandag 08 mei 2006 @ 10:39:
[...]
Maar als ik dat character niet zie in PHPMyAdmin weet ik ook niet waar ik naar moet zoeken.
Epitome schreef op maandag 08 mei 2006 @ 10:27:
Kijk ik dan met PHPMyAdmin naar dat veld van die bepaalde record, dan zie ik er niets mis mee.
Check deze link eens? :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Het zou ook interessant zijn te weten welke versie MySQL je gebruikt en als die 4.1 of groter is, wat dan de character encoding van de desbetreffende tabel is.

Rustacean


  • mithras
  • Registratie: Maart 2003
  • Niet online
Heeft het dan misschien iets te maken met de character encoding van je SQL database, waardoor het uiterlijk in phpmyadmin er als bijv. e uit komt te zien, in plaats van é.

XML gaat daarop dan stuk.

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 26-01 16:18
Een é die door htmlentities() gehaald is ziet er uit als &eacute;
Dat zou dus gewoon moeten werken.

[ Voor 11% gewijzigd door Timer op 08-05-2006 16:36 . Reden: No-parse tags voor die laatste code ;) ]


Verwijderd

TheTimer schreef op maandag 08 mei 2006 @ 10:34:
Het gaat misschien om characters als ü en é.
Gooi de informatie die je echood even door htmlspecialchars() en/of htmlentities().
Voor zover ik weet kent XML "uit zichzelf" maar vijf entities:
  • <
  • >
  • &
  • '
  • "
Andere entities moeten geloof ik apart in de DTD worden opgenomen. Ik neem aan dat XML-parsers stuklopen op andere entities als zij niet expliciet worden gedefinieerd.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

XML kent maar 4 named entities: < > " &
De single quote heeft geen officiele named entity; normaliter wordt &#39; gebruikt. Sommige browsers accepteren ook &apos; maar die is in HTML noch SGML gedefinieerd, laat staan in XML ;)

Voor andere speciale karakters die niet in de karakterset van het XML-document voorkomen kan je het beste numerieke entities gebruiken zoals bijvoorbeeld &#128;
Belangrijkste is echter dat je content en output qua karakterset op elkaar afstemt. Het beste is UTF-8 te gebruiken omdat daarin alle karakters gedefinieerd zijn en er dus geen noodzaak is om 'vreemde' karakters (buiten de karakters met een speciale betekenis) te encoden.

CDATA is geen oplossing voor 'vreemde' karakters; binnen CDATA-secties hoef je echter karakters met speciale betekenis niet te encoden ;)

[ Voor 15% gewijzigd door crisp op 09-05-2006 00:04 ]

Intentionally left blank

Pagina: 1