php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-07-2009, 17:45
INC.
 Registrierter Benutzer
Links : Onlinestatus : INC. ist offline
Registriert seit: Nov 2005
Beiträge: 106
INC. ist zur Zeit noch ein unbeschriebenes Blatt
Lightbulb [gelöst] Frage zu Steuerzeichen, CDATA und Kodierung

Hallo!

XML-Dokumente bestechen ja unter anderem auch dadurch, dass man ohne große Kenntnisse deren Aufbau verstehen und Nachbilden kann. Jetzt stellen sich mir aber doch einige Fragen.

1. Es gibt ja diese CDATA Markierungen. Laut Wikipedia dienen diese dazu, den gekapselten Inhalt aufjedenfall als Text anzuerkennen, auch wenn er aus Steuerzeichen besteht.
Wenn ich nun z.B. eine Bücherverwaltung schreiben möchte und auch Buchtitel wie "Math > Me" darin vorkommen, sollte ich dann die Buchtitel im <title>-Element aufjedenfall mit CDATA kapseln?
Also wenn ich den Wiki-Artikel richtig deute, dann aufjedenfall schon. Allerdings habe ich vor kurzem im Netz eine Radiosender-Playlist entdeckt, welche durch PHP aus XML generiert wurde und dann in HTML gegossen wurde. Da waren auch Titel mit "<" dabei, und ich kann definitiv ausschließen, dass in der Quell-XML CDATA benutzt wurde. Warum hat das trotzdem funktioniert? Hat das die entsprechende PHP-Funktion einfach nicht gejuckt, dass das Dokument genaugenommen nicht valid ist?

2. Sind <, > und & alle Steuerzeichen, oder muss man noch auf andere aufpassen? Gilt cdata nur für Element-Inhalte, oder muss man auch Attribute bei Bedarf so kapseln?

3. Sehe ich das richtig, dass man XML-Dateien nicht einfach so erzeugen kann, wenn unbekannte Strings darin gespeichert werden sollen - selbst wenn man CDATA zur Absicherung benutzt?

Was ich mir konkret als Problem vorstelle:
Ich möchte String-Felder aus einer Datenbank in einem XML-Dokument abspeichern, von mir aus mittels PHP. Da die Strings in der Datenbank Steuerzeichen enthalten können, verwende ich in XML also CDATA an den entsprechenden Stellen. Wenn jetzt zufälligerweise ein String aus der DB das CDATA Close-Tag "]]>" enthält, machts aber trotzdem Bumm, oder?
Sprich: automatisch XML generieren ohne vorher den Inhalt zu überprüfen ist nicht drin?

4. Noch eine Frage zur Kodierung. Wenn ich das Dokument in UTF-8 abspeichere, kann es ja Problemlos ä, ö, ü und Co. enthalten.
Wenn jetzt eine aufrufende Stelle das XML zwischenspeichert - allerdings in mit einer anderen Kodierung - dann sind die Umlaute ja dahin (zumindest, solange nicht wieder UTF-8 verwendet wird). Folglich steht irgendein Kauderwelsch da.
Ist es möglich, dass dieses Kauderwelsch (aufgrund der falschen Kodierung) nun zufällig ausgerechnet XML-Steuerzeichen enthält und das Dokument somit invalid macht?
Sprich, das Dokument ist nichtmehr gültig, obwohl nur die Kodierung, nicht aber der Inhalt verändert wurde.



Danke

Geändert von INC. (17-07-2009 um 17:48 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 17-07-2009, 18:08
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von INC. Beitrag anzeigen
Sind <, > und & alle Steuerzeichen, oder muss man noch auf andere aufpassen?
Doppelte Anführungszeichen und Hochkommata sind ggf. ebenso zu berücksichtigen, wenn sie als Attributwertbegrenzer eingesetzt werden.

Zitat:
Gilt cdata nur für Element-Inhalte, oder muss man auch Attribute bei Bedarf so kapseln?
Das Inhaltsmodell der meisten Attribute ist bereits #CDATA.

Zitat:
Wenn ich nun z.B. eine Bücherverwaltung schreiben möchte und auch Buchtitel wie "Math > Me" darin vorkommen, sollte ich dann die Buchtitel im <title>-Element aufjedenfall mit CDATA kapseln?
Nein, das macht man in der Praxis nicht - man kodiert einfach die ggf. enthaltenen Sonderzeichen, und gut is'.

Zitat:
Sehe ich das richtig, dass man XML-Dateien nicht einfach so erzeugen kann, wenn unbekannte Strings darin gespeichert werden sollen - selbst wenn man CDATA zur Absicherung benutzt?
Natürlich kann man.

Zitat:
Ich möchte String-Felder aus einer Datenbank in einem XML-Dokument abspeichern, von mir aus mittels PHP. Da die Strings in der Datenbank Steuerzeichen enthalten können, verwende ich in XML also CDATA an den entsprechenden Stellen. Wenn jetzt zufälligerweise ein String aus der DB das CDATA Close-Tag "]]>" enthält, machts aber trotzdem Bumm, oder?
]]> beendet den CDATA-Bereich, also wäre an der Stelle eine entsprechende Behandlung dieser Teilzeichenkette, die eine Sonderbedeutung hat, nötig.

Zitat:
Sprich: automatisch XML generieren ohne vorher den Inhalt zu überprüfen ist nicht drin?
"Überprüfen" ist der falsche Ausdruck - kontextgerechte Behandlung ist natürlich erforderlich. Das ist aber immer der Fall, wenn du einen Wert von einem Kontext in einen anderen überführst - also stellt dein Problem hier keineswegs einen Sonderfall, sondern einen absoluten Normalfall dar.

Zitat:
Noch eine Frage zur Kodierung. Wenn ich das Dokument in UTF-8 abspeichere, kann es ja Problemlos ä, ö, ü und Co. enthalten.
Wenn jetzt eine aufrufende Stelle das XML zwischenspeichert - allerdings in mit einer anderen Kodierung - dann sind die Umlaute ja dahin
Dann hat die "aufrufende Stelle" Mist gebaut, ihr Problem.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 17-07-2009, 18:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Simplexml und DOM behandeln die Daten korrekt beim einfügen. Also überlass denen das.

Und wenn du deine XML verrückter Weise unbedingt von Hand zusammenklöppeln willst, könnte dir htmlspecialchars() gute Dienste leisten.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #4 (permalink)  
Alt 17-07-2009, 21:53
INC.
 Registrierter Benutzer
Links : Onlinestatus : INC. ist offline
Registriert seit: Nov 2005
Beiträge: 106
INC. ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank euch beiden.

Zitat:
Zitat von wahsaga Beitrag anzeigen
Doppelte Anführungszeichen und Hochkommata sind ggf. ebenso zu berücksichtigen, wenn sie als Attributwertbegrenzer eingesetzt werden.
Ich würde dich höflichst um ein Beispiel bitten

Zitat:
Zitat von wahsaga Beitrag anzeigen
Das Inhaltsmodell der meisten Attribute ist bereits #CDATA.
Anscheinend ist die Materie doch etwas komplexer, als ich bisher angenommen habe. Ich dachte, als CDATA gilt genau das, was man mit der entsprechenden Notation umklammert. Du meinst, Attribute werden auch ohne entsprechende Ausweisung mit ![CDATA... automatisch so behandelt wie markierte Abschnitte, ohne dass es am Dokument direkt ersichtlich ist?

Zitat:
Zitat von wahsaga Beitrag anzeigen
Nein, das macht man in der Praxis nicht - man kodiert einfach die ggf. enthaltenen Sonderzeichen, und gut is'.
(Hat sich erübrigt).
Ich nehme an, mit Sonderzeichen meinst du in diesem Zusammenhang die Steuerzeichen aus XML? Alles andere dürfte ja keinen Ärger machen.
Und was meinst du mit kodieren, etwa ein ä durch irgendeine kryptische (hexa-)dezilmalen-Buchstabenkombination ersetzen oder wie?
Und: Für was braucht man dann die CDATA Schreibweise überhaupt, wenn man das auch ohne lösen kann? Habe jetzt extra nochmal hier nachgelesen, da kommt es auch so rüber, als bräuchte man dieses CDATA.



Zitat:
Zitat von wahsaga Beitrag anzeigen
]]> beendet den CDATA-Bereich, also wäre an der Stelle eine entsprechende Behandlung dieser Teilzeichenkette, die eine Sonderbedeutung hat, nötig.
Etwa: den vorangehenden CDATA-Bereich durch einfügen von "]]>" aka CDEnd beenden, dann die Teilzeichenkette ]]> ausgeben (welche eben unbewusst identisch ist mit CDEnd), und danach wieder mit ![CDATA... beginnen? So hätte man ]]> "ausgeklammert".

Zitat:
Zitat von wahsaga Beitrag anzeigen
"Überprüfen" ist der falsche Ausdruck - kontextgerechte Behandlung ist natürlich erforderlich. Das ist aber immer der Fall, wenn du einen Wert von einem Kontext in einen anderen überführst - also stellt dein Problem hier keineswegs einen Sonderfall, sondern einen absoluten Normalfall dar.

Stimmt, da hast du natürlich recht. Von einem Sonderfall hab ich allerdings auch nie geredet, aber gut, vielleicht kommt mein ganzer Text so rüber, als sähe ich die Sache als Sonderfall. Nicht beabsichtigt.


Zitat:
Zitat von wahsaga Beitrag anzeigen
Dann hat die "aufrufende Stelle" Mist gebaut, ihr Problem.
Jap, ihr Problem wenn da Textgequirle rauskommt. Das stört mich ja dann auch garnicht, hat der Aufrufer Pech gehabt.
Aber abgesehen davon wäre die Antwort auf die ursprüngliche Frage "ja" (sprich, die Validität eines XML-Docs kann nur durch eine andere Kodierung zerstört werden)? Ist nur so rein aus Interesse.

Zitat:
Zitat von combie Beitrag anzeigen
Simplexml und DOM behandeln die Daten korrekt beim einfügen. Also überlass denen das.
Meinst du durch entsprechendes "Maskieren" mit ![CDATA... oder so wie es wahsaga beschrieben hat? (dieses Kodieren, was ich noch nicht ganz verstanden habe).

Grüße

Geändert von INC. (17-07-2009 um 22:09 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 17-07-2009, 21:59
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Lesen: SELFHTML: XML / Regeln für XML-Dateien / Zeichen, Zeichenkodierungen und nicht interpretierte Abschnitte
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 17-07-2009, 22:07
INC.
 Registrierter Benutzer
Links : Onlinestatus : INC. ist offline
Registriert seit: Nov 2005
Beiträge: 106
INC. ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Argh, jetzt suche ich die ganze Zeit auf der w3c-Seite rum aber den wirklich guten Link musst doch du mir liefern, vielen Dank!

@wahsaga: die Frage mit der Kodierung hat sich somit erübrigt. Bleibt noch die Frage, für was es die CDATA-Notation dann gibt.
Und: Bei normalen Umlauten kann ich aber durchaus auf die Vorteile von UTF-8 zurückgreifen und somit ü statt ü* schreiben?

*hier stand eigentlich der dezimale Wert, aber die Boardsoftware wandelt den dann (logischerweise) in ü um.

Geändert von INC. (17-07-2009 um 22:18 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 18-07-2009, 02:47
Benutzerbild von mermshaus mermshaus
 Registrierter Benutzer
Links : Onlinestatus : mermshaus ist offline
Registriert seit: Jun 2009
Beiträge: 451
mermshaus wird schon bald berühmt werden
Standard

Zitat:
Zitat von INC. Beitrag anzeigen
Bleibt noch die Frage, für was es die CDATA-Notation dann gibt.
Na ja, für alle Daten, die potentiell reservierte Zeichen enthalten könnten, die nicht escaped werden sollen/können. Zum Beispiel HTML-Code, der in einem XML-Tag stehen soll.

Die Sache mit der zufälligen CDATA-Endsequenz lässt sich so lösen (Wikipedia):

Code:
<![CDATA[Inhalt]]]]><![CDATA[>Inhalt]]>
Das bleibt aber eine etwas knifflige Geschichte. (Ich weiß gerade nicht, wie Parser das handhaben. Eigentlich wären das beim Parsen *zwei* CDATA-Tags.) Wenn Escapen aus irgendeinem Grund nicht geht, aber Dateigröße keine entscheidende Rolle spielt, kann man das Problem umgehen, indem man die Daten vor dem Einfügen base64-kodiert. Sonst muss man drumrumprogrammieren.

Zitat:
Und: Bei normalen Umlauten kann ich aber durchaus auf die Vorteile von UTF-8 zurückgreifen und somit ü [...] schreiben
Ja, bei jedem anderen Zeichen außer den paar reservierten auch.
Mit Zitat antworten
  #8 (permalink)  
Alt 18-07-2009, 07:57
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wieso überhaupt "per Hand" XML basteln? Gibt doch so viele fertige Funktionen und Klassen von PHP, die nativ sicher schneller laufen, als jeder selbstgeschriebene Code.
Mit Zitat antworten
  #9 (permalink)  
Alt 18-07-2009, 08:03
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Habe ich auch schon versucht zu sagen....

Scheint aber nicht zu interessieren. Da wird lieber so ein unwichtiges Detailproblem bis zur vergasung beackert, was man gar nicht hätte, wenn man eine der Klassen nutzen würde.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #10 (permalink)  
Alt 18-07-2009, 19:47
INC.
 Registrierter Benutzer
Links : Onlinestatus : INC. ist offline
Registriert seit: Nov 2005
Beiträge: 106
INC. ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@mermsmaus: Danke!

@hell und combie

Ich wollte einfach nur verstehen, wie das intern gehandhabt wird. Ist das jetzt schlimm? Die PHP Klassen mögen das vielleicht können, aber diese Sicherheit habe ich an anderer Stelle eventuell nicht. Es war rein aus Interesse - tut mir leid!
Mit Zitat antworten
  #11 (permalink)  
Alt 19-07-2009, 15:40
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Muß dir nicht leid tun!
Interesse ist gut! Wissen auch!

Aber in der Praxis wird man eine Klasse nutzen.

Zitat:
aber diese Sicherheit habe ich an anderer Stelle eventuell nicht.
Es gibt keine andere Stelle. Jede (halbwegs moderne) Programmiersprache bringt mittlerweile die dazu notwendigen Tools mit. Es ist gerade das "händische" dran rumfummeln, welches fehlerträchtig ist.
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[gelöst] interface + mysql + frage ;) Restless PHP Developer Forum 5 29-10-2009 01:07
ESC POS Steuerzeichen in Txt speeedy018 PHP Developer Forum 2 16-07-2009 11:43
CDATA richtig einsetzten? Laire HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 3 14-02-2009 16:08
CDATA gibt <br> in Klartext aus Coniaric XML 8 07-11-2007 21:46
Habs ganz anders gelöst, und jetzt gehts, nur noch kliene frage: Norok SQL / Datenbanken 22 01-07-2003 21:14

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:09 Uhr.