RSS Feed (XML) auslesen - Fehler mit Anführungszeichen

Lil-rich

Erfahrenes Mitglied
Tach auch,

NEIN, das ist nicht der x-te Thread mit "Warum geht 'str_replace(""", "", $var);' nicht?! :D

Handelt sich hier meiner Meinung nach um ein komplexeres Problem. Vorab sei mal gesagt, dass ich eigentlich schon ein wenig Ahnung von der Materie hab (zwar nicht professionell, aber durchaus so viel, dass ich 98% der Probleme selber lösen kann). Nachdem ich aber gestern geschlagene 5 Stunden an diesem Fall saß und mir auch heute in der Arbeit (natürlich schön übermüdet, wie halt Progger gerne mal anstrahlen :D) keine Lösung einfallen wollte, gebe ich das ganze mal an euch weiter... Hoffentlich hat hier einer mehr Ideen als ich^^

Doch nun zum Problem:
Ich lese ein RSS Feed aus (liegt als XML vor). Dazu nutze ich fsockopen. Das funktioniert soweit alles, die Felder kann ich schön splitten etc., alles wunderbar, ebenso die Ausgabe - außer wenn auf einmal Anführungszeichen vorkommen. Es sind nicht die normalen doppelten Hochkommata, sondern es sind scheinbar Sonderzeichen (zB „). Das ganze sieht (gekürzt) so aus:
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<content:encoded><![CDATA[ Nach Abbau der Ausstellung „Bürgermacht &amp; Bücherpracht“ gehts weiter!]]></content:encoded>
</rss>

Da die Zeichen im Forum (wo eben dieser Content angezeigt werden soll) nicht richtig dargestellt werden, wollte ich sie einfach mit "str_replace()" ersetzen, das geht aber leider nicht. Mit "$var = str_replace("„", "", $content);" erhalte ich als Ausgabe lediglich "Nach Abbau der Ausstellung ", der Rest ist abgeschnitten. Hab auch schon versucht durch andere Zeichen zu ersetzen statt durch "nichts", gleiches Ergebnis.
Da die Anführungszeichen auch nicht korrekt in der Datenbank gespeichert werden (utf8_ci), wenn ich sie vorher encode oder anderswie umwandle (zB htmlentities()) habe ich die Vermutung, dass sie schon "vermurkst" ankommen.
Wie kann ich hier Abhilfe schaffen?

Ausgabe im Forum:
Code:
Nach Abbau der Ausstellung „Bürgermacht & Bücherpracht“ gehts weiter!

In der Datenbank nur durch leere Vierecke dargestellt. Aber auch diese komischen Zeichen hier über mir kann ich nicht ersetzen lassen durch str_replace(). Da verhauts mir meinen ganzen Editor bzw. die Syntax und es geht in die Hose^^

Hat irgendwer noch eine Idee was ich hier probieren könnte? Und woher diese merkwürdigen Zeichen überhaupt kommen?
Hab ja das encoding im Verdacht, nur konnte ich hier auch durch Umwandlungen (mb_convert oder so ähnlich wars) nichts erreichen :( Entweder er schneidet mir alles ab (s.o.) oder es kommen diese Zeichen -.-" Es ist wirklich zum verrückt werden...

Edit:
Ich sehe gerade, dass die Zeichen die ich erwähnt habe (Viereckige Kästchen mit kleinen Zahlen - 00 84 bzw. 00 93 jeweils untereinander) hier im Forum automatisch zu Anführungszeichen gewandelt werden?!

Also liegts wohl doch am encoding?! Ich werd noch irre...

Edit2:
Hab jetz mal verglichen und mein erster Verdacht hat sich bestätigt. Bei uns im Forum ist UTF-8, hier ISO-8859-1 eingestellt. Verflucht noch eins :/ Wieso funktionierte dann die Umwandlung nicht? Hab ich da nen Denkfehler? Vllt kann mich ja mal einer aufklären, ob das überhaupt geht und wenn ja wie... Denn einfaches Umstellen auf "ISO-8859-1" hat nix geholfen :D
 
Zuletzt bearbeitet:
Ja, hab ich schon probiert. Das zerschiesst mir dann nur die Umlaute...

Merkwürdig finde ich auch, dass ich de Anführungszeichen ganz normal benutzen kann, wenn ich sie kopiere und ins Forum poste. Andersrum klappts nicht, also wenn ich die Zeichen kopiere und poste, dann bleiben die - im Gegensatz zu diesem Forum, wo selbige dann zu den normale Anführungszeichen umgewandelt werden.

Sonst noch Ideen?

P.S.: Ein Gersthofener hier im Forum :) Ich traue meinen Augen nicht. Grad kein Projekt am Laufen und eventuell Interesse an einem? -> PM me!
 
Ich denke mal, das utf8_* nicht funktioniert, weil das Zeichen als Entity angegeben ist. Evtl. kannst du das Zeichen im Quellcode so sehen:

Code:
& #8222; (ohne Leerzeichen)

Wenn dem so ist, kannst du versuchen, html_entity_decode() zu verwenden, um den Inhalt in einen wirklichen Unicode-String um zu wandeln.
 
negativ, ist im Quelltext genauso als Kästchen mit 4 Zahlen zu sehen...

Hier mal ein Pastebin-Link, bei dem scheinbar nichts konvertiert wird:
http://pastebin.com/pbZPeLdw

RAW paste data repräsentiert hier das Aussehen im Forum selbst, oben bei "1.", also leere Kästchen, repräsentieren die Ausgabe der Datenbank (per PHPMyAdmin)
 
Blöde Frage: An welcher Stelle bastel ich es am besten mit rein? Vor dem Speichern in die DB oder erst hinterher bei der Ausgabe?

In einem ersten Test kam statt den Anführungszeichen nur jeweils ein "?", wo liegt der Fehler? Oder soll das so sein oO?
Code:
echo mb_convert_encoding($var, "UTF-8", "ISO-8859-1");
echo mb_convert_encoding($var, "HTML-ENTITIES", "ISO-8859-1");
echo mb_convert_encoding($var, "UTF-8", "cp1252");
echo mb_convert_encoding($var, "HTML-ENTITIES", "cp1252");
 
Zuletzt bearbeitet:
Vor dem Speichern in die DB, denn dann musst du den Vorgang nur einmal ausführen. Wenn das bei der Ausgabe gemacht wird, ist das vergeudete CPU-Zeit. IMHO sollte der Aufruf so aussehen:

PHP:
$converted = mb_convert_encoding($input, "UTF-8", "Windows-1252"); // Es sollte UTF-8 verwendet werden, das macht es etwas einfacher

Wenn du Unicode verwendest, bereitest du deine Ausgabe für die Zukunft vor. Viele Dinge, vor allem so Sachen wie EUR-Anzeige und dergleichen, sind dadurch einfacher zu handeln.

Um damit zu arbeiten muss deine DB, die Verbindung zur DB (mysql => "SET NAMES 'utf8'") und auch die Ausgabe im Browser in Unicode erfolgen.
 
Danke für deine Hilfe :) DB und Ausgabe sind bereits auf UTF-8, das sollte also passen.
Hab mich direkt ans Testen gemacht und es klappt :)) Jetzt zerhaut es mir zwar die Umlaute, aber das krieg ich ja ganz einfach in den Griff :)

Danke für die (wie immer) tolle Hilfe!!
 
Zurück