"We are back" « oc.at

PHP zeichensatz problem

Umlüx 22.10.2015 - 14:34 3417 17
Posts

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
folgendes problem:
ich hab ortsnamen in einer datenbank, z.b: Na Poříčí
die muss ich auslesen und per xml (utf8) in ein anderes tool schieben.

ich hab aber arge probleme mit dem zeichensatz, bzw der konvertierung dessen. denn der string sieht eigentlich so aus:
code_208101.jpg
den gatsch musste ich jetzt direkt als bild reinhängen ums euch zeigen zu können, denn die forensoftware stellts korrekt dar :) sind das numeric html entities? aber nicht nur?

ich hab mich jetzt schon mit html_entity_decode und utf8_encode gespielt, aber ich komm auf keinen grünen zweig...

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
iconv hilft mir leider auch nicht weiter, da ich anscheinend einen mischmasch an zeichensätzen da drin hab. ich könnt mir dann zwar die html entities übersetzen, aber er würd mir die >í< verhauen

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10342
Code: PHP
$returnValue = html_entity_decode('Poříčí', ENT_COMPAT, 'UTF-8');  //(forum ersetzt das ;) aber da steht dein originalstring drinnen)  
ergibt bei mir
$returnValue = Poříčí
.. und das ist ja jetzt schon utf-8.. einfach so schreiben.

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
wieso hauts bei mir nicht hin...

$xml->writeElement('Street', html_entity_decode($STRASSE,ENT_COMPAT,"utf-8"));
ergibt dann 2_208102.jpg

AdRy

Auferstanden
Avatar
Registered: Oct 2002
Location: Wien
Posts: 5239
Umlüx wo liest/siehst du das falsche Ergebnis? Es kann einen Unterschied machen ob du es im Browser, Datei, windows konsole doer linux konsole ausliest/anzeigst. Da kann noch was auf dem weg dreinpfuschen.

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
das php wirft mir eine XML datei damit aus
sowohl wenn ichs mit z.b. PSPad ansehe, als auch nach dem import ins zielsystem (eine web applikation mit oracle db dahinter) sehe ich die gleichen 'schiefen' zeichen.
umlaute und der einfache rest passen alle.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12118
Erwartet der Viewer, mit dem du dir dein Resultat ansiehst, denn auch tatsaechlich Unicode in UTF-8-Kodierung?

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
der xml importer der applikation erwartet utf-8

ich merke gerade, der string zerreist mir überhaupt die komplette codierung des XML files. bei datensätzen mit diesem problem passen danach die umlaute im xml auch nicht mehr, alle anderen sind aber ok.
und es scheint vorwiegend die hacecks zu betreffen.

AdRy

Auferstanden
Avatar
Registered: Oct 2002
Location: Wien
Posts: 5239
Dann wird das Problem wohl darin liegen wie du das XML file schreibst, wenns dort schon nicht richtig drinnen steht. Wie erstellst/schreibst du das XML bzw. hast du beim erstellen des Files das utf-8 encoding gesetzt?

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
im moment siehts in etwa so aus:
Code: PHP
header("Content-type: application/xml; charset=UTF-8"); 
header("Content-Disposition: attachment; filename=\"export.xml\"");
// select der daten aus einer MySQL (Latin1)
$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument('1.0" encoding="UTF-8');
...
 $xml->startElement('Address');
  $xml->writeElement('Street', html_entity_decode($strasse, ENT_COMPAT, 'UTF-8'));
  $xml->writeElement('PostalCode', $plz);
  $xml->writeElement('City', utf8_encode($ort));
 $xml->endElement();
...
$xml->endDocument();
print_r($xml->outputMemory());
$xml->flush();
funktioniert alles prima. ausser bei solche einträgen wie dem erwähnten problemfall. sowohl die datenbank, als auch das zielsystem sind übrigens nicht von mir und daher nicht beeinflussbar.

AdRy

Auferstanden
Avatar
Registered: Oct 2002
Location: Wien
Posts: 5239
Vl wirds nur im forum faslch dargestellt:
Du hast:
Code: PHP
$xml->startDocument('1.0" encoding="UTF-8');

Es gehört afaik so:
Code: PHP
$xml->startDocument('1.0', 'UTF-8');

oder du könntest DOMDocument() statt XMLWriter probieren.

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
nein das passt schon so. mit 2 getrennten argumenten hab ich grobe probleme. und bin laut php.net nicht der einzige.
und wie gesagt, es stimmt sonst auch alles. andere sonderzeichen und umlaute etc.. funktionieren problemlos.
nur diese numeric html entities(?) nicht.

XeroXs

Vereinsmitglied
doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10342
php ist echt :bash:

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8996
Zitat von XeroXs
php ist echt :bash:

this

ich brech das glaub ich ab. ich versch... zuviel zeit damit. es sind ein paar dutzend datzensätze, die müssen sie dann halt von hand korrigieren...

dennoch danke an alle
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz