You are not logged in.

  • Login

1

Thursday, March 23rd 2006, 9:26pm

Encoding Probleme (Umlaute) mit XML / PHP

Hallo Freunde der leichten Kodierung,

ich bräuchte mal ein wenig Hilfe, und zwar bin ich dabei mit der DOM-Implementierung von PHP einen XML-Creator zu bauen.

Es wird im Prinzip ein XML-File gebaut, der mit Daten aus einer DB gefüllt wird.

Nun habe ich arge Probleme mit dem Encoding. In der Datenbank stehen Datensätze mit Umlauten wie Ü, ä, Ä usw.

Leider funktioniert die Angabe vom Encoding aber nicht

PHP Quellcode

1
2
3
4
5
6
7
8
$struct = $dom_imp->createDocument("", "", $dtd);
$struct->encoding = 'ISO-8859-1';
$root = AddNode($struct, "WebData", $struct);
 
$information = AddNode($struct, "Information", $root);
$title = AddNode($struct, "title", $information);
 
... (Knoten werden weiter aufgebaut und mit Daten gefüllt)


Die Fehlermeldung ist folgende

Quoted


<b>Warning</b>: DOMDocument::saveXML() [<a href='function.saveXML'>function.saveXML</a>]: output conversion failed due to conv error in <b>creatorExporter.php</b> on line <b>173</b><br />
<br />
<b>Warning</b>: DOMDocument::saveXML() [<a href='function.saveXML'>function.saveXML</a>]: Bytes: 0xFC 0x62 0x65 0x72 in <b>creatorExporter.php</b> on line <b>173</b><br />
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE WebData SYSTEM "Data.dtd">
<WebData><Information><title>Aktions


Da sieht man dass er bei "Aktions" abschneidet, da sollte eig. "Aktionsübersicht" stehen und so weiter ....

Wo liegt der Fehler?

Besten Dank!!!

2

Thursday, March 23rd 2006, 11:00pm

welche zeile ist denn die 173.?

was mir nur auffällt:

PHP Quellcode

1
2
$struct = $dom_imp->createDocument("", "", $dtd);
$struct->encoding = 'ISO-8859-1';


In der 1. Zeile scheint $struct eine ganz normale Variable zu sein, der ein bestimmter Wert zugewiesen wird. In dieser zweiten Zeile ist es auf einmal ein Objekt. Wie kommt es zu dieser wundersamen Wandlung?

3

Friday, March 24th 2006, 11:10am

Hallo

Quoted from ""wulfgang""

welche zeile ist denn die 173.?

was mir nur auffällt:


In der 1. Zeile scheint $struct eine ganz normale Variable zu sein, der ein bestimmter Wert zugewiesen wird. In dieser zweiten Zeile ist es auf einmal ein Objekt. Wie kommt es zu dieser wundersamen Wandlung?


In der DOMImplementation ist das doch so angegeben?

http://de2.php.net/manual/de/function.dom-domimplementation-createdocumenttype.php

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
// Creates an instance of the DOMImplementation class
$imp = new DOMImplementation;
 
// Creates a DOMDocumentType instance
$dtd = $imp->createDocumentType('graph', '', 'graph.dtd');
 
// Creates a DOMDocument instance
$dom = $imp->createDocument("", "", $dtd);
 
// Set other properties
$dom->encoding = 'UTF-8';
$dom->standalone = false;


Ist das etwa nicht korrekt?

In der 173. Zeile wird die aufgebaute Struktur ausgegeben

PHP Quellcode

1
2
3
4
5
6
function PrintResult($toPrint) {
 
	// print the xml-structure
	$xml_string = $toPrint->saveXML(); // <-- 173. Zeile
	echo $xml_string;
}

4

Sunday, March 26th 2006, 3:32am

Niemand eine Idee, wie man das Problem lösen kann?

MfG

5

Sunday, March 26th 2006, 11:27am

hast du das beispiel von php.net mal ausprobiert?

der code ist ja nicht so riesig, ich würde schrittweise vorgehen
beispielcode nehmen - testen
utf8 in iso ändern - testen
addNodes hinzufügen - testen

sorry, andere idee hab ich jetzt auch nicht

6

Monday, March 27th 2006, 1:36am

Danke, ich hab eine Funktion gefunden, die iso (aus der DB) in utf-8 (für XML) umkodiert ...

iconv nennt die sich!! Funktioniert wunderbar damit.

Mal eine Frage nebenbei, gibt es für PHP eig. eine IDE mit einem Debugger, wo ich sehen kann welchen Wert eine aktuelle Variable hat?

7

Monday, March 27th 2006, 2:50pm

ich habs zwar selber noch nicht ausprobiert, aber PHPEclipse hat einen Debugger

Ich persönlich nutze Eclipse für Java und C++... bietet sich eigentlich an, dass ich das PHP Plugin auch mal installiere

8

Wednesday, May 31st 2006, 12:33pm

Fehler in PHP Dokumentation

Der Fehler liegt in der PHP Doku.
DOMImplementation darf man nicht instantiieren, sondern muss es static verwenden:

PHP Quellcode

1
2
3
4
$doctype = DOMImplementation::createDocumentType("html",
               "-//W3C//DTD HTML 4.01//EN",
               "http://www.w3.org/TR/html4/strict.dtd");
$doc = DOMImplementation::createDocument(null, 'html', $doctype);


hth

Similar threads

Social bookmarks