tag:forum.selfhtml.org,2005:/self htmlentities "bereinigen" – SELFHTML-Forum 2015-06-15T14:12:57Z https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642714#m1642714 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T09:01:10Z 2015-06-11T09:01:10Z htmlentities "bereinigen" <p>Hallo, ich lese eine html-Datei aus, die laut Quelltext folgendes enthält:</p> <pre><code class="block">Dazu hat die Große Koalition das sogenannte &#8222Versorgungsstärkungsgesetz&ldquo;&ensp;vorgelegt </code></pre> <p>Ich gebe das dann aus mit</p> <pre><code class="block"> <?php echo htmlspecialchars ($text, ENT_QUOTES); ?> </code></pre> <p>Angezeigt werden aber bei der Ausgabe statt irgendwelcher Anführungszeichen nur Fragezeichen. Wie kann ich das so konvertieren, dass es in Anführungszeichen gewandelt wird (egal welche).</p> <p>Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642715#m1642715 dedlfix 2015-06-11T09:17:22Z 2015-06-11T09:17:22Z htmlentities "bereinigen" <p>Tach!</p> <blockquote> <p>Hallo, ich lese eine html-Datei aus, die laut Quelltext folgendes enthält:</p> <pre><code class="block">Dazu hat die Große Koalition das sogenannte &#8222Versorgungsstärkungsgesetz&ldquo;&ensp;vorgelegt </code></pre> <p>Ich gebe das dann aus mit</p> <pre><code class="block"> <?php echo htmlspecialchars ($text, ENT_QUOTES); ?> </code></pre> <p>Angezeigt werden aber bei der Ausgabe statt irgendwelcher Anführungszeichen nur Fragezeichen.</p> </blockquote> <p>Das passt irgendwie nicht zusammen. Wo sollen denn die Fragezeichen herkommen? Die könnten höchstens beim ß und ä auftauchen, wenn etwas mit der Kodierung(sangabe) nicht stimmt. Du müsstest eigentlich den Text so sehen, wie du ihn hier gezeigt hast, also mit &x8222 etc, weil das htmlspecialchars() aus den & ein &amp; macht, die der Browser wieder weginterpretiert.</p> <blockquote> <p>Wie kann ich das so konvertieren, dass es in Anführungszeichen gewandelt wird (egal welche).</p> </blockquote> <p>So wie der Text vorliegt muss gar nichts konvertiert werden, weil er ja schon HTML-gerecht ist - auch wenn die Entitys zugunsten von richtigen Zeichen gleich gar nicht erst in der Quelle zu sein bräuchten. Jedenfalls, das einzige was ich sehe, ist das fehlende Semikolon nach dem &#8222.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642716#m1642716 TS 2015-06-11T09:22:22Z 2015-06-11T09:22:22Z htmlentities "bereinigen" <p>Hallo,</p> <blockquote> <p>Hallo, ich lese eine html-Datei aus, die laut Quelltext folgendes enthält:</p> </blockquote> <pre><code class="block">Dazu hat die Große Koalition das sogenannte &#8222;Versorgungsstärkungsgesetz&ldquo;&ensp;vorgelegt </code></pre> <p>Da fehlte schon mal ein Semikolon.</p> <blockquote> <p>Ich gebe das dann aus mit</p> <pre><code class="block"> <?php echo htmlspecialchars ($text, ENT_QUOTES); ?> </code></pre> </blockquote> <p>Das ist nun auch doppelt gemoppelt. Wenn Entities im Text enthalten sind, muss man davon ausgehen, dass schon jemand versucht hat, alle HTML-fremden oder HTML-schädlichen Zeichen zu ersetzen.</p> <p>Wenn Du die vermeintlich schädlichen & nun noch einmal ersetzt, werden &amp; daraus.</p> <blockquote> <p>Angezeigt werden aber bei der Ausgabe statt irgendwelcher Anführungszeichen nur Fragezeichen. Wie kann ich das so konvertieren, dass es in Anführungszeichen gewandelt wird (egal welche).</p> </blockquote> <p>Du könntest versuchen, die Entities zurückzuwandeln in die Codierung, in der der übrige Text verfasst ist. <a href="http://php.net/manual/en/function.html-entity-decode.php" rel="noopener noreferrer">http://php.net/manual/en/function.html-entity-decode.php </a></p> <p>Und dann kannst Du auf den gesamten, hoffentlich in einer einheitlichen Codierung verfassten Text, htmlspecialchars() anwenden, um den Text dann in der zur Seite passenden Codierung im HTML-Kontext auszugeben.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642725#m1642725 glupto 2015-06-11T11:23:18Z 2015-06-11T11:23:18Z htmlentities "bereinigen" <p>Also, ich habe das jetzt so - wie von Dir empfohlen - gemacht, dennoch bekomme ich Fragezeichen. Hier ist die Originalseite (Inzwischen geht es um eine andere Meldung, aber mit demselben Problem:). Vielleicht siehst Du da ja mehr als ich.</p> <p>Saarbrücken: Uraufführung mit Flüchtlingen</p> <p>Am Sonntag bringt das Saarländische Staatstheater das Flüchtlings-Projekt <strong>„Brennpunkt X“</strong> auf die Bühne. Die Uraufführung findet im Rohbau des erweiterten Saarlandmuseums statt. Das Stück wurde nach Interviews in der Landesaufnahmestelle Lebach von Autor Nuran David Calis entwickelt und von Regisseur Jörg Wesemüller umgesetzt. Dabei stehen sieben Flüchtlinge aus Syrien und dem Iran gemeinsam mit vier Schauspielern des Staatstheaters auf der Bühne. Sie erzählen über ihre hochriskante Flucht und ihr schwieriges Leben als Asylbewerber in Deutschland.</p> <p><a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642729#m1642729 Auge 2015-06-11T11:46:55Z 2015-06-11T11:47:41Z htmlentities "bereinigen" <p>Hallo</p> <blockquote> <p>Also, ich habe das jetzt so - wie von Dir empfohlen - gemacht, dennoch bekomme ich Fragezeichen. Hier ist die Originalseite (Inzwischen geht es um eine andere Meldung, aber mit demselben Problem:). Vielleicht siehst Du da ja mehr als ich.</p> <p><a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> </blockquote> <p>Im fraglichen Text auf der Seite findet sich kein einziges maskiertes Zeichen. Wenn du diesen Text (über welchen Weg auch immer; Welcher Weg ist es denn?) aus der Seite herausziehst und anschließend, auf deiner Seite, verstümmelte Zeichen da sind, dann fügst du sie an irgendeiner Stelle des Prozesses selbst ein.</p> <p>Beschreibe bitte erst einmal, was du machst, um an den Inhalt der Seite zu kommen.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642730#m1642730 TS 2015-06-11T11:47:47Z 2015-06-11T11:47:47Z htmlentities "bereinigen" <p>Hallo,</p> <blockquote> <p>Also, ich habe das jetzt so - wie von Dir empfohlen - gemacht, dennoch bekomme ich Fragezeichen. Hier ist die Originalseite (Inzwischen geht es um eine andere Meldung, aber mit</p> </blockquote> <p>demselben Problem:). Vielleicht siehst Du da ja mehr als ich.</p> <blockquote> <p><a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> </blockquote> <p>ich sehe dort überhaupt keine Auffälligkeiten. Bei mir wird alles mMn ordentlich angezeigt.</p> <p>Aber das kann von Browser, Proxies (Mitlesern), Fonts auf dem Client und so vielen anderen Dingen abhängen... Ich ahbe so viele Fonts auf meinem Client, dass selten einer fehlt. Mach doch bitte mal einen Screenshot von deinem Arbeitsplatz zum Vergleich und lade den hier ins Forum.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642768#m1642768 Christian Kruse http://ck.kennt-wayne.de/ 2015-06-11T13:59:01Z 2015-06-11T13:59:01Z htmlentities "bereinigen" <p>Hallo glupto,</p> <p>slightly off-topic aber eventuell für dich relevant: Vorsicht, könnte gut sein dass die von dir verlinkte Seite unter das Leistungsschutzrecht fällt.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> <a href="http://ck.kennt-wayne.de/" rel="nofollow noopener noreferrer">CK kennt Wayne</a> </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642732#m1642732 Auge 2015-06-11T11:57:27Z 2015-06-11T11:57:58Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <p>Im fraglichen Text auf der Seite findet sich kein einziges maskiertes Zeichen.</p> </blockquote> <p>Das ist falsch. Ich hatte mir nur den Quelltext des markierten Bereichs angeschaut, der im Firefox als resultierendes DOM u.a. mit <strong>automatischen Korrekturen</strong> ausgegeben wird. Dort war tatsächlich kein maskiertes Zeichen vorhanden.</p> <p>Lasse ich mir den vollständigen Seitenquelltext anzeigen, wird mir der Quelltext des <strong>vom Server gelieferten</strong> Dokuments angezeigt. <strong>Dort</strong> finden sich sehr wohl maskierte Zeichen.</p> <pre><code class="block">das Flüchtlings-Projekt &#8222Brennpunkt X&ldquo;&ensp;auf die Bühne </code></pre> <p>Wie zu sehen ist, gibt es schon dort die bereits genannten Fehler (und es sind nicht die einzigen, die sich in der Seite finden). Solche Fehler, von denen du vorher nicht weißt, wie sie konkret aussehen, automatisiert zu beheben, ist ein Ding der Unmöglichkeit. Gängige fehler wirst du aber schon beheben können.</p> <p>Daher bleibt die folgende Frage weiterhin auf dem Tableau.</p> <blockquote> <p>Beschreibe bitte erst einmal, was du machst, um an den Inhalt der Seite zu kommen.</p> </blockquote> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642748#m1642748 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T12:48:48Z 2015-06-11T13:01:17Z Korrektur meines vorherigen Postings <blockquote> <blockquote> <p>Beschreibe bitte erst einmal, was du machst, um an den Inhalt der Seite zu kommen.</p> </blockquote> </blockquote> <p>Ich mache dies hier (und ja, es ist legal und mit sr-online abgesprochen - aber irgendwie kriegen die es wohl nicht hin, einen rss-feed anzubieten):</p> <pre><code class="block">$data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = utf8_decode($node2->nodeValue); $zaehler++; } } $data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $xPath = new DOMXPath($doc); $zaehler = 0; foreach ($xPath->query("//div[@class=\"mitte_folgeseiten\"]/ul/li/a") as $element) { if ($zaehler <= 7) { $hreft = $element->getAttribute("href"); $title = $element->nodeValue; $href = "http://www.sr-online.de".$hreft; $href = utf8_decode($href); $title = utf8_decode($title); ?> <li><a href=' <?php echo htmlspecialchars ($href); ?> ' target='_blank' class="ketchup tooltip" title=" <?php echo htmlspecialchars ($array[$zaehler], ENT_QUOTES); ?> "> <?php echo htmlspecialchars ($title); ?> </a></li> <?php $zaehler++; } } </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642750#m1642750 Der Martin 2015-06-11T12:58:00Z 2015-06-11T12:58:00Z Korrektur meines vorherigen Postings <p>Hallo,</p> <blockquote> <pre><code class="block">$data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = utf8_decode($node2->nodeValue); </code></pre> </blockquote> <p>(schnipp)</p> <p>Genau hier geht's in die Binsen. Die von sr-online.de gelesene Ressource ist in UTF-8 codiert. Warum willst du sie in etwas anderes umwandeln? Genau dabei gehen dir eine Menge Zeichen verloren, die in den ISO-Latin-Codierungen nicht darstellbar sind und deshalb zu Fragezeichen umgewandelt werden.</p> <p>Warum willst du das nicht in UTF-8 lassen?</p> <p>So long,<br>  Martin</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642756#m1642756 Auge 2015-06-11T13:13:25Z 2015-06-11T13:13:25Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <blockquote> <p>Beschreibe bitte erst einmal, was du machst, um an den Inhalt der Seite zu kommen.</p> </blockquote> </blockquote> <p>Ich mache dies hier (und ja, es ist legal und mit sr-online abgesprochen - aber irgendwie kriegen die es wohl nicht hin, einen rss-feed anzubieten):</p> </blockquote> <p>…</p> <p>Ok, eine Frage, auch wenn das ursächlich nichts mit deinem Problem zu tun hat. Ich sehe überall den Einsatz der Funktion <code>utf8decode</code>. Deine Seite wird mit der Kodierung ISO-8859-1 ausgeliefert? <em>Ansonsten</em> wäre der Einsatz der Funktion falsch.</p> <p>Die einzige Ausgabe, die im gezeigten Code erfolgt, ist die am Ende, wenn eine Liste mit Links zu Meldungen erstellt wird. Wenn du dort, wie hier gezeigt, mit <code>htmlspecialchars</code> arbeitest, bleiben die Anführungszeichen <em>ohne die Angabe</em> von <code>ENT_QUOTES</code> unangetastet. <em>Mit der Angabe</em> werden sie maskiert. Das gilt aber nur für die auch in HTML benutzten Anführungszeichen „"“ ([SHIFT]+[2]) und „'“ ([SHIFT]+[#]). Typografische Anführungszeichen bleiben davon unbelassen, da sie im HTML-Kontext keine Sonderbedeutung haben.</p> <p>Beim einzig fraglichen <code>echo htmlspecialchars($title);</code> maskierst du da auch nichts zusätzlich, so dass an dieser Stelle – wie schon von mehreren gesagt – einzig die in der Quelle bereits vorhandenen Zeichen <code>&#8222</code>, <code>&ldquo</code>; und <code>&ensp;</code> dazwischenfunken, weil dort das Kaufmannsund „&“ noch einmal maskiert wird, womit im HTML-Quelltext <code>&amp;#8222</code>, <code>&amp;ldquo</code>; und <code>&amp;ensp;</code> herauskommt. Daher wird auf der Seite <code>&#8222</code>, <code>&ldquo</code>; und <code>&ensp;</code> angezeigt. Dass dem Zeichen <code>&#8222</code> das abschließende Semikolon fehlt, das zumindest von der Fehlerkorrektur des Firefox in der Quelle stillschweigend angenommen wird, steht auf einem weiteren Blatt.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642753#m1642753 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T13:05:53Z 2015-06-11T13:05:53Z Korrektur meines vorherigen Postings <blockquote> <p>Warum willst du das nicht in UTF-8 lassen?</p> <p>So long,<br>  Martin</p> </blockquote> <p>Danke für die Antwort, aber wenn ich es lasse, sieht es so aus:</p> <blockquote></blockquote> <pre><code>Berlin: Cyberangriff auf Bundestags-IT schwerer als angenommen Berlin: Groko gegen drittes Griechenland-Paket Frankfurt: Staatsanwaltschaft bestätigt Razzia gegen mögliche Steuerbetrüger Wiesbaden: Betreuungsgeld für eine halbe Million Kinder Saarbrücken: Fast 34. 000 dauerhafte Hartz IV Empfänger im Saarland Saarbrücken: Uraufführung mit Flüchtlingen </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642757#m1642757 Der Martin 2015-06-11T13:14:03Z 2015-06-11T13:14:03Z Korrektur meines vorherigen Postings <p>Hi,</p> <blockquote> <blockquote> <p>Warum willst du das nicht in UTF-8 lassen?</p> </blockquote> <p>Danke für die Antwort, aber wenn ich es lasse, sieht es so aus:</p> <blockquote></blockquote> <pre><code>Berlin: Cyberangriff auf Bundestags-IT schwerer als angenommen Berlin: Groko gegen drittes Griechenland-Paket Frankfurt: Staatsanwaltschaft bestätigt Razzia gegen mögliche Steuerbetrüger Wiesbaden: Betreuungsgeld für eine halbe Million Kinder Saarbrücken: Fast 34. 000 dauerhafte Hartz IV Empfänger im Saarland Saarbrücken: Uraufführung mit Flüchtlingen </code></pre> </blockquote> <p>ja klar, so sieht UTF-8 aus, wenn man es dem Browser (Editor, sonstiger Software) beispielsweise als ISO-8859-x verkauft. Natürlich muss dein Teil der Verarbeitung dann auch durchgängig UTF-8 verwenden.</p> <p>Wenn du das nicht willst, musst du umcodieren, etwa wie du es schon getan hast - aber dann verlierst du eben Informationen. Nämlich genau die Zeichen, die sich in der Ziel-Codierung nicht darstellen lassen.</p> <p>Ciao,<br>  Martin</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642761#m1642761 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T13:25:43Z 2015-06-11T13:25:43Z Korrektur meines vorherigen Postings <blockquote> <p>Hallo</p> <blockquote> <blockquote> <blockquote> <p>Beschreibe bitte erst einmal, was du machst, um an den Inhalt der Seite zu kommen.</p> </blockquote> </blockquote> <p>Ich mache dies hier (und ja, es ist legal und mit sr-online abgesprochen - aber irgendwie kriegen die es wohl nicht hin, einen rss-feed anzubieten):</p> </blockquote> <p>…</p> <p>Ok, eine Frage, auch wenn das ursächlich nichts mit deinem Problem zu tun hat. Ich sehe überall den Einsatz der Funktion <code>utf8decode</code>. Deine Seite wird mit der Kodierung ISO-8859-1 ausgeliefert? <em>Ansonsten</em> wäre der Einsatz der Funktion falsch.</p> </blockquote> <p>Das utf8decode habe ich eingefügt, weil alle Umlaute falsch ausgegeben wurden, lasse ich es weg, kommen zwar die Anführungsstriche korrekt, aber die Umlaute nicht ....In meinem Header steht:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642759#m1642759 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T13:21:44Z 2015-06-11T13:21:44Z Korrektur meines vorherigen Postings <blockquote> <p>ja klar, so sieht UTF-8 aus, wenn man es dem Browser (Editor, sonstiger Software) beispielsweise als ISO-8859-x verkauft. Natürlich muss dein Teil der Verarbeitung dann auch durchgängig UTF-8 verwenden.</p> <p>Wenn du das nicht willst, musst du umcodieren, etwa wie du es schon getan hast - aber dann verlierst du eben Informationen. Nämlich genau die Zeichen, die sich in der Ziel-Codierung nicht darstellen lassen.</p> </blockquote> <p>Wird meine Seite nicht in UTF8 ausgeliefert, wenn im Header steht?:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642760#m1642760 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-11T13:23:37Z 2015-06-11T13:23:37Z Korrektur meines vorherigen Postings <p>@@Der Martin</p> <blockquote> <p>Natürlich muss dein Teil der Verarbeitung dann auch durchgängig UTF-8 verwenden.<br> Wenn du das nicht willst,</p> </blockquote> <p>… friert die Hölle zu.</p> <p>Man will durchgängig UTF-8 verwenden. Immer und überall.</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642764#m1642764 Der Martin 2015-06-11T13:37:41Z 2015-06-11T13:37:41Z Korrektur meines vorherigen Postings <p>Hallo,</p> <blockquote> <p>Wird meine Seite nicht in UTF8 ausgeliefert, wenn im Header steht?:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> </blockquote> <p>nein, nur weil man auf ein Glas Gewürzgurken ein Bild mit Pfirsichen klebt, sind noch lange keine Pfirsiche drin.</p> <p>Andersrum wird ein Schuh draus: Zunächst mal musst du dafür sorgen, dass dein HTML tatsächlich in UTF-8 codiert ist. Und dann kommt der oben zitierte HTTP-Header zum Zug, um genau das auch dem Browser mitzuteilen.</p> <p>Also erst Pfirsiche reintun, dann ist das aufgeklebte Pfirsichbild auch richtig.</p> <p>So long,<br>  Martin</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642762#m1642762 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-11T13:31:00Z 2015-06-11T13:31:00Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <p>Das utf8decode habe ich eingefügt, weil alle Umlaute falsch ausgegeben wurden, lasse ich es weg, kommen zwar die Anführungsstriche korrekt, aber die Umlaute nicht ....In meinem Header steht:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> </blockquote> <p>Gibt es eventuell im HTML Konflikte mit <a href="http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta#Zeichencodierung" rel="nofollow noopener noreferrer">konkurrierenden Angaben</a>?</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642770#m1642770 Auge 2015-06-11T14:07:45Z 2015-06-11T14:07:45Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <p>Ok, eine Frage, auch wenn das ursächlich nichts mit deinem Problem zu tun hat. Ich sehe überall den Einsatz der Funktion <code>utf8decode</code>. Deine Seite wird mit der Kodierung ISO-8859-1 ausgeliefert? <em>Ansonsten</em> wäre der Einsatz der Funktion falsch.</p> </blockquote> <p>Das utf8decode habe ich eingefügt, weil alle Umlaute falsch ausgegeben wurden, lasse ich es weg, kommen zwar die Anführungsstriche korrekt, aber die Umlaute nicht ....In meinem Header steht:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> </blockquote> <p>Dass der Header am Schluss zum Zuge kommt, hat dir Martin schon <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642764#m1642764" rel="noopener noreferrer">mit seinem Einweckgleichnis</a> erklärt. Dröseln wir das mal auf.</p> <p>Um die Ausgabe von UTF-8 sicher zu stellen, ist …</p> <ul> <li>… die Eingabe in UTF-8 vorzunehmen oder nach UTF-8 umzuwwandeln.</li> <li>… die durchgängige Verarbeitung in der kodierung UTF-8 durchzuführen.</li> <li>… die Ausgabe in UTF-8 vorzunehmen.</li> </ul> <p>Du bekommst vom SR den Inhalt – mit all seinen Unzulänglichkeiten – in UTF-8. Du gibst auf deiner Seite, wenn auch verkrüppelt, UTF-8 aus. Irgendwo dazwischen geht etwas schief. Da ist einerseits die falsche Umwandlung mit <code>utf8decode</code>, da ist aber wohl auch noch etwas anderes. Ich vermute, dass es mit dem Parameter Charset der Funktion <a href="https://php.net/manual/de/function.htmlspecialchars.php" rel="noopener noreferrer"><code>htmlspecialchars</code></a> zu tun hat. Unter PHP 5.4 und 5.5 wird standardmäßig UTF-8 verwendet, frühere PHP-Versionen verwenden ISO-8859-1, ab PHP 5.6 wird standardmäßig die mit <a href="https://php.net/manual/de/ini.core.php#ini.default-charset" rel="noopener noreferrer">default_charset</a> ermittelte Kodierung verwendet.</p> <p>Hast du nun deinen nach ISO-8859-1 umgewandelten String und jagst ihn durch <code>htmlspecialchars</code>, welches mangels anderer Angaben UTF-8 verwendet (oder umgekehrt) wird bei Zeichen, die in der jeweils anderen Kodierung nicht oder an anderer Stelle vorkommen, Salat herauskommen. Nutze also den Paramater Charset für <code>htmlspecialchars</code>.</p> <p>Ansonsten fällt mir im gezeigten Code nur noch eines auf.</p> <pre><code class="block"> <li><a href=' <?php echo htmlspecialchars ($href); ?> ' target='_blank' class="ketchup tooltip" title=" </code></pre> <p>Benutze zur Behandlung von <code>$href</code> nicht <code>htmlspecialchars</code>, sondern <a href="https://php.net/manual/de/function.rawurlencode.php" rel="noopener noreferrer"><code>rawurlencode</code></a>, das dazu da ist, Sonderzeichen des Kontexts URL zu maskieren (z.B. Leerzeichen in Dateinamen als „%20“).</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642763#m1642763 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-11T13:37:08Z 2015-06-11T13:37:08Z Korrektur meines vorherigen Postings <p>@@Camping_RIDER</p> <blockquote> <p>Gibt es eventuell im HTML Konflikte mit <a href="http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta#Zeichencodierung" rel="nofollow noopener noreferrer">konkurrierenden Angaben</a>?</p> </blockquote> <p>Wenn die Zeichencodierung im HTTP-Header angegeben ist, kann in der <code>meta</code>-Angabe im HTML stehen, was will; das wird nicht beachtet. (Dennoch sollte da natürlich auch die richtige Zeichencodierung angegeben sein.)</p> <p>Die HTTP-Angabe kann noch vom BOM überschrieben werden. Die Angabe von UTF-8 also mit UTF-8. ;-) (Ein vorhandenes UTF-16-BOM halte ich jetzt mal für unwahrscheinlich.)</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642765#m1642765 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T13:42:44Z 2015-06-11T13:42:44Z Korrektur meines vorherigen Postings <p>~</p> <blockquote> <p>Gibt es eventuell im HTML Konflikte mit <a href="http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta#Zeichencodierung" rel="nofollow noopener noreferrer">konkurrierenden Angaben</a>?</p> <p>Grüße,</p> <p>RIDER</p> </blockquote> <p>Also egal, wie ich welche utf8-Angabe (header/meta-Angabe) ändere, das Ergebnis ist immer dasselbe.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642785#m1642785 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-11T16:00:39Z 2015-06-11T16:00:39Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <p>Wenn die Zeichencodierung im HTTP-Header angegeben ist, kann in der <code>meta</code>-Angabe im HTML stehen, was will; das wird nicht beachtet. (Dennoch sollte da natürlich auch die richtige Zeichencodierung angegeben sein.)</p> </blockquote> <p>Das ist mir bewusst. Ich halte es trotzdem für eine mögliche Fehlerquelle (z.B. gesetzt den Fall der header wird - wieso auch immer - nicht gesendet), die überprüft und eliminiert werden sollte.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642895#m1642895 TS 2015-06-12T17:18:58Z 2015-06-12T17:18:58Z Meta-Angabe im File unerheblich? <p>Hallo Gunnar,</p> <blockquote> <blockquote> <p>Gibt es eventuell im HTML Konflikte mit <a href="http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta#Zeichencodierung" rel="nofollow noopener noreferrer">konkurrierenden Angaben</a>?</p> </blockquote> <p>Wenn die Zeichencodierung im HTTP-Header angegeben ist, kann in der <code>meta</code>-Angabe im HTML stehen, was will; das wird nicht beachtet. (Dennoch sollte da natürlich auch die richtige Zeichencodierung angegeben sein.)</p> <p>Die HTTP-Angabe kann noch vom BOM überschrieben werden. Die Angabe von UTF-8 also mit UTF-8. ;-) (Ein vorhandenes UTF-16-BOM halte ich jetzt mal für unwahrscheinlich.)</p> </blockquote> <p>Ist schon erstaunlich, was ein paar Scheuklappen so alles bewirken können ;-D</p> <p>Ich diesem Fall wird <strong>nur</strong> die Meta-Angabe im File ausgewertet. Wie soll die DOMDocument-Klasse auch an die HTTP-Header herankommen, wenn ihr ein String übergeben wird?</p> <p>Der Vollständigkeit halber habe ich es auch nochmal mit</p> <pre><code class="block language-php"><span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTMLFile</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>ausprobiert. Da wäre ja die Möglichkeit vorhanden, an die Header heranzukommen.<br> Haben die PHP-Entwickler aber auch nicht so gemacht.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642928#m1642928 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-13T08:35:55Z 2015-06-13T08:38:47Z Offenheit für Fehlerquellen <p>Aloha ;)</p> <blockquote> <blockquote> <p>Gibt es eventuell im HTML Konflikte mit <a href="http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta#Zeichencodierung" rel="nofollow noopener noreferrer">konkurrierenden Angaben</a>?</p> </blockquote> <p>Wenn die Zeichencodierung im HTTP-Header angegeben ist, kann in der <code>meta</code>-Angabe im HTML stehen, was will; das wird nicht beachtet. (Dennoch sollte da natürlich auch die richtige Zeichencodierung angegeben sein.)</p> </blockquote> <p>Irgendwie lustig, dass ich im Endeffekt mit meinem ersten Rateversuch <em>doch</em> irgendwie <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642890#m1642890" rel="noopener noreferrer">auf der richtigen Spur war</a>. Vielleicht lohnt es sich manchmal also doch, auch die abwegigen Ideen, von denen man <em>eigentlich</em> weiß, dass es nicht der Grund sein kann, einmal durchzuspielen ;)</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642767#m1642767 glutpo info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T13:56:41Z 2015-06-11T13:56:41Z Korrektur meines vorherigen Postings <blockquote> <p>Also erst Pfirsiche reintun, dann ist das aufgeklebte Pfirsichbild auch richtig.</p> <p>So long,<br>  Martin</p> </blockquote> <p>Ja, die meta-charset - Angabe war nicht innerhalb der ersten 1024 Bytes, aber jetzt wird alles vom w3-checker als fehlerfrei angezeigt, dennoch hat das an der Darstellung nichts geändert.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642766#m1642766 Matthias Apsel 2015-06-11T13:49:30Z 2015-06-11T13:49:30Z Korrektur meines vorherigen Postings <p>Hallo glutpo,</p> <blockquote> <p>Also egal, wie ich welche utf8-Angabe (header/meta-Angabe) ändere, das Ergebnis ist immer dasselbe.</p> </blockquote> <p>Und was machen die <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642764#m1642764" rel="noopener noreferrer">Pfirsiche</a>?</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Signaturen sind bloed (Steel) und Markdown ist mächtig. </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642771#m1642771 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-11T14:13:55Z 2015-06-11T14:13:55Z Korrektur meines vorherigen Postings <p>@@Matthias Apsel</p> <blockquote> <p>Und was machen die <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642764#m1642764" rel="noopener noreferrer">Pfirsiche</a>?</p> </blockquote> <p>Nektarinen sein und sich in ihrer Haut unwohl fühlen.</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642772#m1642772 Tabellenkalk 2015-06-11T14:14:26Z 2015-06-11T14:14:26Z Korrektur meines vorherigen Postings <p>Hallo,</p> <blockquote> <p>Und was machen die <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642764#m1642764" rel="noopener noreferrer">Pfirsiche</a>?</p> </blockquote> <p>Vermutlich hat er zusätzlich zum Etikett an der Seite auch noch ein Pfirsich-Etikett auf den Deckel geklebt.</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642769#m1642769 Der Martin 2015-06-11T14:05:23Z 2015-06-11T14:05:23Z Korrektur meines vorherigen Postings <p>Hi,</p> <blockquote> <blockquote> <p>Also erst Pfirsiche reintun, dann ist das aufgeklebte Pfirsichbild auch richtig.</p> </blockquote> <p>Ja, die meta-charset - Angabe ...</p> </blockquote> <p>die ist für'n ... ähm, ist irrelevant, wenn ein gleichnamiger HTTP-Header gesendet wird. Und sie ist in Wirklichkeit auch nur wie ein Lieferschein, der im Paket liegt. Nochmal: Erst muss der Inhalt des Pakets stimmen - also der HTML-Quellcode tatsächlich in UTF-8 codiert sein. Dann legt man den Lieferschein rein, der den Inhalt beschreibt und dazu passen sollte. Also beispielsweise die meta-Angabe im Quellcode. Und zum Schluss noch der Aufdruck außen auf dem Paket (HTTP-Header), der ebenfalls zum Inhalt passen sollte.</p> <p>So long,<br>  Martin</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642894#m1642894 TS 2015-06-12T17:10:56Z 2015-06-12T17:10:56Z meta-charset - Angabe war nicht innerhalb der ersten 1024 Bytes <p>Hallo,</p> <blockquote> <p>Ja, die meta-charset - Angabe war nicht innerhalb der ersten 1024 Bytes, aber jetzt wird alles vom w3-checker als fehlerfrei angezeigt, dennoch hat das an der Darstellung nichts geändert.</p> </blockquote> <p>Wenn man bedenkt, <strong>wie</strong> dicht Du hiermit schon an der Lösung warst :-)</p> <p>Mich beruhigt aber, dass alle Mitposter genauso gerätselt haben...</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642789#m1642789 glupto 2015-06-11T16:42:45Z 2015-06-11T16:42:45Z htmlentities "bereinigen" <blockquote> <p>Hallo glupto,</p> <p>slightly off-topic aber eventuell für dich relevant: Vorsicht, könnte gut sein dass die von dir verlinkte Seite unter das Leistungsschutzrecht fällt.</p> <p>LG,<br> CK</p> <div class="signature">-- <br> > <a href="http://ck.kennt-wayne.de/" rel="nofollow noopener noreferrer">CK kennt Wayne</a> Danke für den Hinweis, aber ich hatte ja in einer meiner Antworten geschrieben, dass alles mit dem sr abgesprochen ist. </div> </blockquote> <p>Danke für den Hinweis, aber ich hatte ja in einer meiner Antworten geschrieben, dass alles mit dem sr abgesprochen ist.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642774#m1642774 dedlfix 2015-06-11T14:18:16Z 2015-06-11T14:18:16Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <p>Ich vermute, dass es mit dem Parameter Charset der Funktion <a href="https://php.net/manual/de/function.htmlspecialchars.php" rel="noopener noreferrer"><code>htmlspecialchars</code></a> zu tun hat. Unter PHP 5.4 und 5.5 wird standardmäßig UTF-8 verwendet, frühere PHP-Versionen verwenden ISO-8859-1, ab PHP 5.6 wird standardmäßig die mit <a href="https://php.net/manual/de/ini.core.php#ini.default-charset" rel="noopener noreferrer">default_charset</a> ermittelte Kodierung verwendet.</p> </blockquote> <p>Irrelevant. Die von htmlspecialchars() betroffenen Zeichen sind alle im ASCII-Bereich. Das ist nur bei irgendwelchen asiatischen Kodierungen wichtig, die die "ASCII-Bytes" auch anderweitig wiederverwenden.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642799#m1642799 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de/_testindex.php 2015-06-11T19:54:59Z 2015-06-11T19:54:59Z Korrektur meines vorherigen Postings <p>Also, ich habe jetzt den Inhalt mir var_dump ausgegeben, vorher die ganze Seite in utf8 konvertiert/abgespeichert und wieder hochgeladen. Resultat:</p> <blockquote> <p>string(502) "Die EU gibt der griechischen Regierung im Schuldenstreit noch eine Woche, um mit den Gläubigern zu einer Einigung zu kommen. EU-Ratspräsident Tusk sagte, es gebe keine Zeit mehr für Spielchen. Ein Sprecher des Internationalen Währungsfonds ergänzte, es gebe mit Athen noch immer wesentliche Differenzen in entscheidenden Punkten. Aus Sicht von EU-Kommissionspräsident Juncker waren Gespräche mit Griechenlands Regierungschef Tsipras aber konstruktiv verlaufen. Holger Romann: O-Ton"</p> </blockquote> <p>Leider ist im Moment in der Description der Seite kein Anführungszeichen mehr, so dass ich diese Fehler jetzt nicht testen kann, aber auf jeden Fall werden die Umlaute nicht korrekt ausgegeben, bzw. sie kommt gar nicht korrekt an nach dem $data = file_get_contents...</p> <p>Anzuschauen unter der Testseite: <a href="http://www.nachrichtentisch.de/_testindex.php" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642773#m1642773 Tabellenkalk 2015-06-11T14:16:50Z 2015-06-11T14:16:50Z Korrektur meines vorherigen Postings <p>Hallo,</p> <blockquote> <p>Nektarinen sein und sich in ihrer Haut unwohl fühlen.</p> </blockquote> <p>Aber Pfirsichhaut wird doch im Gegensatz zur Orangenhaut angestrebt!</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642775#m1642775 Auge 2015-06-11T14:35:43Z 2015-06-11T14:35:43Z Aha, dann weiter im Text. <p>Hallo</p> <blockquote> <blockquote> <p>Ich vermute, dass es mit dem Parameter Charset der Funktion <a href="https://php.net/manual/de/function.htmlspecialchars.php" rel="noopener noreferrer"><code>htmlspecialchars</code></a> zu tun hat. Unter PHP 5.4 und 5.5 wird standardmäßig UTF-8 verwendet, frühere PHP-Versionen verwenden ISO-8859-1, ab PHP 5.6 wird standardmäßig die mit <a href="https://php.net/manual/de/ini.core.php#ini.default-charset" rel="noopener noreferrer">default_charset</a> ermittelte Kodierung verwendet.</p> </blockquote> <p>Irrelevant. Die von htmlspecialchars() betroffenen Zeichen sind alle im ASCII-Bereich. Das ist nur bei irgendwelchen asiatischen Kodierungen wichtig, die die "ASCII-Bytes" auch anderweitig wiederverwenden.</p> </blockquote> <p>Ok, wieder etwas gelernt.</p> <p>Dann von einer anderen Stelle aus.</p> <p>Wir wissen, dass der SR seine Seite(n) in UTF-8 kodiert. Wir wissen, dass bestimmte Zeichen im Text als HTML-Entities [<code>&ldquo;</code> und <code>&ensp;</code>] und als (unvollständige) Zeichenreferenz (Heißt das so?) [<code>&#8222</code>] maskiert sind <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>. Zudem gibt es ein paar unmaskierte Umlaute.</p> <p>Frage an glupto: An welcher Stelle im Verarbeitungsprozess werden die Zeichen verkrüppelt? Nutze zur Ermittlung bitte <strong>nach jedem Bearbeitungschritt</strong> jeweils <code>echo '<pre>'. vardump($betroffeneVariable) .'</pre>';</code>.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>Warum beide Systeme (in der Beispielmeldung unnötigerweise) vermischt werden und warum <code>&ldquo;</code> (<em>left</em> double quote) am <em>rechten</em> Ende des eingefassten Textes steht, bleibt wohl ungeklärt. <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> </ol> </section> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642792#m1642792 TS 2015-06-11T17:46:37Z 2015-06-11T17:46:37Z Korrektur meines vorherigen Postings <p>Selber Tach!</p> <blockquote> <blockquote> <p>Ich vermute, dass es mit dem Parameter Charset der Funktion <a href="https://php.net/manual/de/function.htmlspecialchars.php" rel="noopener noreferrer"><code>htmlspecialchars</code></a> zu tun hat. Unter PHP 5.4 und 5.5 wird standardmäßig UTF-8 verwendet, frühere PHP-Versionen verwenden ISO-8859-1, ab PHP 5.6 wird standardmäßig die mit <a href="https://php.net/manual/de/ini.core.php#ini.default-charset" rel="noopener noreferrer">default_charset</a> ermittelte Kodierung verwendet.</p> </blockquote> </blockquote> <p>und die kann man mandativ machen:</p> <pre><code class="block">php_admin_value default_charset iso-8859-1 </code></pre> <p>an passender Stelle in der Apache-Konfiguration untergebracht und es lässt sich mit PHP nix mehr steuern.</p> <p>Außerdem könnte auch ein</p> <pre><code class="block">AddDefaultCharset ON </code></pre> <p>dafür sorgen, dass der Apache (2.2) nur die Default-Einstellung ISO-8859-1 benutzt</p> <p><a href="http://httpd.apache.org/docs/2.2/de/mod/core.html#AddDefaultCharset" rel="nofollow noopener noreferrer">http://httpd.apache.org/docs/2.2/de/mod/core.html#AddDefaultCharset</a></p> <p>Bevor Ihr weiter Rätselraten spieolt, sollte man erst einmal nachgucken, was wo eingestellt ist und was tatsächlich beim Client ankommt. Eine Änderung nur per header() in PHP ist jedenfalls nicht immer möglich.</p> <p>Grüße TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642779#m1642779 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-11T15:33:10Z 2015-06-11T15:33:10Z Aha, dann weiter im Text. <p>@@Auge</p> <blockquote> <p>warum <code>&ldquo;</code> (<em>left</em> double quote) am <em>rechten</em> Ende des eingefassten Textes steht, bleibt wohl ungeklärt.</p> </blockquote> <p>Letzteres ist einfach erklärt: Die Bezeichnung LEFT DOUBLE QUOTATION MARK bezieht sich auf die Verwendung des Zeichens “ U+201C im Englischen. Dort wird es als öffnendes Anführungszeichen verwendet, steht also links. Als schließendes Anführungszeichen dient ” U+201D RIGHT DOUBLE QUOTATION MARK (HTML-Entity <code class="language-html"><span class="token entity named-entity" title="&rdquo;">&rdquo;</span></code>).</p> <p>Anders <a href="https://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen#Deutschland_und_.C3.96sterreich" rel="nofollow noopener noreferrer">im Deutschen</a>: Da wird “ als schließendes Anführungszeichen verwendet. Das öffnende Anführungszeichen ist „ U+201E DOUBLE LOW-9 QUOTATION MARK (HTML-Entity <code class="language-html"><span class="token entity named-entity" title="&sbquo;">&sbquo;</span></code>, <a href="http://forum.selfhtml.org/self/2005/jan/9/warum-sbquo/744674#m744674" rel="noopener noreferrer">ja <code class="language-html"><span class="token entity named-entity" title="&sbquo;">&sbquo;</span></code></a>).</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642782#m1642782 dedlfix 2015-06-11T15:52:18Z 2015-06-11T15:52:18Z Aha, dann weiter im Text. <p>Tach!</p> <blockquote> <p>Frage an glupto: An welcher Stelle im Verarbeitungsprozess werden die Zeichen verkrüppelt? Nutze zur Ermittlung bitte <strong>nach jedem Bearbeitungschritt</strong> jeweils <code>echo '<pre>'. vardump($betroffeneVariable) .'</pre>';</code>.</p> </blockquote> <p>In dem Fall bitte <code>echo urlencode($betroffeneVariable);</code> statt var_dump() verwenden.</p> <p>urlencode() lässt sich bei Zeichenkodierungsproblemen sehr gut missbrauchen. var_dump() liefert im Zweifelsfall ein wie auch immer geartetes Zeichen und man kann nur anhand der Stringlänge grob schließen, ob ein oder zwei Byte verwendet wurden. urlencode() zeigt alles außer den uninteressanten Grundbuchstaben quasi in Byte-Form an.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642781#m1642781 Auge 2015-06-11T15:48:12Z 2015-06-11T15:48:12Z Aha, dann weiter im Text. <p>Hallo</p> <blockquote> <blockquote> <p>warum <code>&ldquo;</code> (<em>left</em> double quote) am <em>rechten</em> Ende des eingefassten Textes steht, bleibt wohl ungeklärt.</p> </blockquote> <p>Die Bezeichnung LEFT DOUBLE QUOTATION MARK bezieht sich auf die Verwendung des Zeichens “ U+201C im Englischen. Dort wird es als öffnendes Anführungszeichen verwendet, steht also links. …</p> <p>Anders <a href="https://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen#Deutschland_und_.C3.96sterreich" rel="nofollow noopener noreferrer">im Deutschen</a>: Da wird “ als schließendes Anführungszeichen verwendet.</p> </blockquote> <p>Als HTML-Entity wird also das englischsprachige Anführungszeichen als deutschsprachiges Ausführungszeichen wiederverwendet.</p> <p>Ich zitiere mich dann auch mal: <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642775#m1642775" rel="noopener noreferrer">Ok, wieder etwas gelernt.</a></p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642788#m1642788 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-11T16:27:16Z 2015-06-11T16:27:16Z Aha, dann weiter im Text. <p>@@Gunnar Bittersmann</p> <blockquote> <p>Das öffnende Anführungszeichen ist „ U+201E DOUBLE LOW-9 QUOTATION MARK (HTML-Entity <code class="language-html"><span class="token entity named-entity" title="&sbquo;">&sbquo;</span></code>, <a href="http://forum.selfhtml.org/self/2005/jan/9/warum-sbquo/744674#m744674" rel="noopener noreferrer">ja <code class="language-html"><span class="token entity named-entity" title="&sbquo;">&sbquo;</span></code></a>).</p> </blockquote> <p>Ähm nein. s wie SINGLE, d wie DOUBLE. Also HTML-Entity <code class="language-html"><span class="token entity named-entity" title="&bdquo;">&bdquo;</span></code> – mit b und d in der richtigen Reihenfolde.</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642790#m1642790 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-11T16:52:27Z 2015-06-11T16:52:27Z Danke erstmal an alle,... <p>... muss jetzt leider andere Sachen arbeiten, werde aber die Empfehlungen Schritt für Schritt durcharbeiten. Habe eben zu Sicherheit noch mal die php-Datei in utf8 ohne BOM abgespeichert. Ändert es etwas an der UTF8-Kodierung einer Seite, wenn ich einmal ein ü als &uuml; definiert habe.? Im Header steht es auch richtig. Dann werde ich mal durchchecken, wo die Zeichen in die Grütze gehen.</p> <p>Gruß glupt</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642791#m1642791 dedlfix 2015-06-11T17:45:55Z 2015-06-11T17:45:55Z Danke erstmal an alle,... <p>Tach!</p> <blockquote> <p>Ändert es etwas an der UTF8-Kodierung einer Seite, wenn ich einmal ein ü als &uuml; definiert habe.?</p> </blockquote> <p>Die Kodierung wird nicht vom Inhalt festgelegt, sondern von dem der den Inhalt in eine computerlesbare Form bringt, also dein Texteditor oder das Programm, das die Daten erzeugt beziehungsweise weiterverarbeitet.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642802#m1642802 dedlfix 2015-06-11T23:02:46Z 2015-06-11T23:02:46Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <blockquote> <p>string(502) "Die EU gibt der griechischen Regierung im Schuldenstreit noch eine Woche, um mit den Gläubigern zu einer Einigung zu kommen.</p> </blockquote> </blockquote> <p>Das ist UTF-8 interpretiert als ISO-8859-1 und nochmal nach UTF-8 konvertiert.</p> <p>Nimm das urlencode() und geh schrittweise durch die Verarbeitungsschritte. Als erstes gleich nach dem Holen anschauen, dann weiter nach jedem Schritt. Irgendwo hast du eine unnötige Umkodierung. Die brauchst du vielleicht für andere Quellen, die ihr Zeug in ISO-8859-1 liefern, aber dann musst du das eben fallweise machen.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642803#m1642803 woodfighter 2015-06-11T23:06:59Z 2015-06-11T23:06:59Z Korrektur meines vorherigen Postings <p>Tach,</p> <blockquote> <p>Also, ich habe jetzt den Inhalt mir var_dump ausgegeben, vorher die ganze Seite in utf8 konvertiert/abgespeichert und wieder hochgeladen. Resultat: Anzuschauen unter der Testseite: <a href="http://www.nachrichtentisch.de/_testindex.php" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> </blockquote> <p>die Seite wird als UTF-8 ausgeliefert, allerdings hast du die Daten der SR-Nachrichten fälschlicherweise als Iso interpretiert und zu UTF-8 kodiert obwohl sie bereits UTF-8 waren, deswegen die Fehler mit den Umlauten in dem Textteil.</p> <p>mfg<br> Woodfighter</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642804#m1642804 woodfighter 2015-06-11T23:14:57Z 2015-06-11T23:14:57Z dein Impressum <p>Tach,</p> <p>andere Baustelle: „Mit Urteil vom 12. Mai 1998 hat das Landgericht Hamburg entschieden“; <a href="https://de.wikipedia.org/wiki/Disclaimer#Website-Disclaimer" rel="nofollow noopener noreferrer">dieses Urteil</a> ist nie rechtskräftig geworden und sagte außerdem das Gegenteil von dem aus, was du behauptest.</p> <p>Und noch was anderes: du hast mit allen betroffenen Verlagen/Seiten Vereinbarungen wg. des Urheber- und Leistungsschutzrechtes getroffen?</p> <p>mfg<br> Woodfighter</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642815#m1642815 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T06:53:49Z 2015-06-12T06:53:49Z Korrektur meines vorherigen Postings <p>allerdings hast du die Daten der SR-Nachrichten fälschlicherweise als Iso interpretiert und zu UTF-8 kodiert obwohl sie bereits UTF-8 waren, deswegen die Fehler mit den Umlauten in dem Textteil.</p> <blockquote> <p>mfg<br> Woodfighter</p> </blockquote> <p>Wodurch interpretiere ich die SR-Nachrichten als ISO?</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642814#m1642814 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T06:51:59Z 2015-06-12T06:51:59Z dein Impressum <blockquote> <p>Tach,</p> <p>andere Baustelle: „Mit Urteil vom 12. Mai 1998 hat das Landgericht Hamburg entschieden“; <a href="https://de.wikipedia.org/wiki/Disclaimer#Website-Disclaimer" rel="nofollow noopener noreferrer">dieses Urteil</a> ist nie rechtskräftig geworden und sagte außerdem das Gegenteil von dem aus, was du behauptest.</p> <p>Und noch was anderes: du hast mit allen betroffenen Verlagen/Seiten Vereinbarungen wg. des Urheber- und Leistungsschutzrechtes getroffen?</p> <p>mfg<br> Woodfighter</p> </blockquote> <p>Danke für den Hinweis mit dem Urteil, das hatte ich von einer offenbar nicht empfehlenswerten Rechtsberatungsseite übernommen.</p> <p>Ich habe nicht mit jedem einzelnen Medium Einzelabsprachen. Bei allen außer NDR und SR nutze ich den angebotenen Rss-feed, den ich laut Rechtshinweis der jeweiligen Seiten in meine Homepage einbinden darf, solange das nicht zu kommerziellen Zwecken stattfindet, keine frames verwendet werden und auf die Quelle hingewiesen und verlinkt wird. Mit SR und NDR habe ich Einzelvereinbarungen getroffen. Im Übrigen sind einige Medien (RP-Online, DLF) auf die Seite aufgenommen worden, weil mich die jeweiligen Verlage/Redaktionen ausdrücklich darum gebeten haben.</p> <p>Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642816#m1642816 Der Martin 2015-06-12T07:11:59Z 2015-06-12T07:11:59Z dein Impressum <p>Hallo,</p> <blockquote> <p>Danke für den Hinweis mit dem Urteil, das hatte ich von einer offenbar nicht empfehlenswerten Rechtsberatungsseite übernommen.</p> </blockquote> <p>mag sein, aber das Märchen vom Hamburger Landgericht ist doch mittlerweile so alt, dass man meinen sollte, es hätte sich mittlerweile herumgesprochen, dass das Käse ist, wie es meistens gebraucht und dargestellt wird.</p> <blockquote> <p>Ich habe nicht mit jedem einzelnen Medium Einzelabsprachen. Bei allen außer NDR und SR nutze ich den angebotenen Rss-feed, den ich laut Rechtshinweis der jeweiligen Seiten in meine Homepage einbinden darf, solange das nicht zu kommerziellen Zwecken stattfindet, keine frames verwendet werden und auf die Quelle hingewiesen und verlinkt wird.</p> </blockquote> <p>Das ist dann vermutlich in Ordnung.</p> <blockquote> <p>Mit SR und NDR habe ich Einzelvereinbarungen getroffen. Im Übrigen sind einige Medien (RP-Online, DLF) auf die Seite aufgenommen worden, weil mich die jeweiligen Verlage/Redaktionen ausdrücklich darum gebeten haben.</p> </blockquote> <p>Das hast du hoffentlich auch schriftlich, dann klingt das für mich ziemlich wasserdicht.</p> <p>Ciao,<br>  Martin</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642819#m1642819 dedlfix 2015-06-12T07:32:17Z 2015-06-12T07:32:17Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <blockquote> <p>allerdings hast du die Daten der SR-Nachrichten fälschlicherweise als Iso interpretiert und zu UTF-8 kodiert obwohl sie bereits UTF-8 waren, deswegen die Fehler mit den Umlauten in dem Textteil.</p> </blockquote> <p>Wodurch interpretiere ich die SR-Nachrichten als ISO?</p> </blockquote> <p>Mal ohne ein Blatt vor den Mund zu nehmen: Im Moment scheinst du mir bezüglich der Zeichenkodierung ziemlich rumzueiern. Du probierst aufs Geratewohl Sachen aus, bis es richtig aussieht, aber ohne dass du die Grundlagen verstanden hast. Das kannst du ändern, wenn du mal Grundlagenliteratur dazu liest. Die Frage nach dem "Was ist das überhaupt?" und "Warum gibt es so viele?" sind unter anderem <a href="http://wiki.selfhtml.org/wiki/Zeichenkodierung" rel="nofollow noopener noreferrer">in unserer Dokumentation</a> geklärt.</p> <p>Zu deiner eigentlichen Frage: Du hast da eine Folge von Bytes vorliegen. Wenn du die genauso interpretierst, wie sie der Sender kodiert hat, dann ist alles in Ordnung und du bekommst genau dieselben Zeichen raus, die der Sender gemeint hat. Wenn du sie aber nach einer anderen Vorschrift interpretierst, kommt Mist raus. In deinem Fall nimmst du vermutlich eine Umkodierfunktion, die die Zeichen in der einen Kodierung interpretiert (in der sie aber nicht vorliegen) und dann in eine andere zu bringen versucht. So entsteht der Salat.</p> <p>Du musst schon genau wissen, welche Kodierung vorliegt und welche es werden soll. Dass du mit unterschiedlichen Quellen arbeitest, die unterschiedlich kodiert sein können, macht die Sache nicht einfacher.</p> <p>Deine nächste Frage wird sein, wie du die Kodierung automatisch erkennen kannst. Nun, es gibt da einige Indizien, aber die sind nicht vollständig aussagekräftig oder es ist manchmal gar unmöglich, die Kodierung aus den Daten heraus zu erraten. Eigentlich senden die Quellen (oder solltes es zumindest) immer mit, welche Kodierung vorliegend ist. Dazu musst du aber die HTTP-Header auswerten und gegebenenfalls die Ersatzangabe im HTML-Head. Oder du machst es dir einfach und untersuchst die Kodierungsangaben der einzelnen Quellen zu Fuß und nimmst an, dass das in Zukunft so bleiben wird und hartkodierst deine gegebenenfalls notwendigen Umkodierfunktionen je nach Quelle.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642892#m1642892 TS 2015-06-12T16:50:43Z 2015-06-12T16:50:43Z SR-Nachrichten als ISO interpretiert <p>Hallo,</p> <blockquote> <p>allerdings hast du die Daten der SR-Nachrichten fälschlicherweise als Iso interpretiert und zu UTF-8 kodiert obwohl sie bereits UTF-8 waren, deswegen die Fehler mit den Umlauten in dem Textteil.</p> <blockquote> <p>mfg<br> Woodfighter</p> </blockquote> <p>Wodurch interpretiere ich die SR-Nachrichten als ISO?</p> </blockquote> <p>Durch den fehlenden <em><strong>antiqierten</strong></em> <meta>-Tag</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">http-equiv</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>content-type<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/html; charset=utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>für das Encoding interpretiert DOMSocument::loadHTML() die Seite als ISO-8859-1. Die Klasse ist wohl noch nicht vollständig überarbeitet. Darauf muss man aber erst einmal kommen, da $dom->encoding mit "utf-8" antwortet...</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642826#m1642826 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T08:31:18Z 2015-06-12T08:31:18Z Korrektur meines vorherigen Postings <p>Ja, du hast recht, ich eiere da herum, ich habe mir auch die wiki-Seite durchgelesen, sehe aber immer noch nicht, wo ich im untenstehenden php etwas umkodieren sollte?</p> <pre><code class="block">$data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $zaehler = 0; $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = $node2->nodeValue; </code></pre> <p>Wenn ich anschließend den Inhalt von $node2->nodeValue mit var_dump ausgebe, kommt schon Umlaut-Müll heraus.</p> <p>Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642829#m1642829 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-12T08:49:15Z 2015-06-12T08:56:20Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <p>Wenn ich anschließend den Inhalt von $node2->nodeValue mit var_dump ausgebe, kommt schon Umlaut-Müll heraus.</p> </blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> <p>Was dedlfix dir sagen wollte ist, dass du irgendwo in deinem Skript zwischen dem Einlesen der Daten (was du aktuell mit file_get_contents tust) und der Ausgabe eine (korrekte) Konvertierung vornehmen musst. Dazu brauchst du zwei Informationen: das Eingabeformat (das musst du rausbekommen) und das Ausgabeformat (hier UTF-8).</p> <p>Das Eingabeformat findest du, wie dedlfix sagte, im http-Header (dazu musst du die Inhalte allerdings anders anfordern, file_get_contents ist da ungenügend, da dass nur die Antwort, nicht aber den Antwort-Header liefert) falls du es automatisch auslesen lassen willst (was sicher die nachhaltig gesehen bessere Variante ist), oder du bestimmst es einmal zu Fuß und kodierst es dann hart.</p> <p>@Edit: Du könntest die Inhalte beispielsweise über <a href="http://php.net/manual/en/function.http-get.php" rel="noopener noreferrer">http_get</a> anfordern oder die Klassen <a href="http://php.net/manual/en/class.httprequest.php" rel="noopener noreferrer">HttpRequest</a>/<a href="http://php.net/manual/en/class.httpmessage.php" rel="noopener noreferrer">HttpMessage</a> nutzen.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642830#m1642830 dedlfix 2015-06-12T09:06:08Z 2015-06-12T09:06:08Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <blockquote> <p>Wenn ich anschließend den Inhalt von $node2->nodeValue mit var_dump ausgebe, kommt schon Umlaut-Müll heraus.</p> </blockquote> </blockquote> <p>Beim Ausgeben findet wieder eine Interpretation statt, denn das ausgebende System muss ja aus den Daten entnehmen, welche Zeichen es auf die Ausgabe zu schreiben hat. Deswegen ist es bei Kodierungsproblemen ratsam, auch diese Fehlerquelle auszuschließen. Das kann man tun, indem man sich nicht das Ergebnis der (Fehl)interpretation sondern erstmal die Daten selbst anschaut. Nimm echo urlencode() und lass das var_dump() in dem Fall mal weg. Das nimmst du gleich nach dem file_get_contents().</p> <p>Die DOMDocument-Geschichte will mit UTF-8 arbeiten. Dessen Ergebnis ist auch UTF-8. Anschauen was da rauskommt, wieder mit echo urlencode(). Wenn du Problemb%C3%A4r siehst, dann ist das auf den ersten Blick UTF-8 (wegen der zwei Bytes C3 und A4 für den Umlaut). Ein Blick in eine Zeichenkodierungstabelle offenbart, dass das ein ä ist. Bei Problemb%E4r kann es kein UTF-8 sein. Abkürzenderweise kann man hierzulande als Faustregel bei 2 Byte davon ausgehen, dass es UTF-8 ist, bei nur einem ist es höchstwahrscheinlich ISO-8859-1. I Zweifelsfall dochmal eine Zeichenkodierungstabelle bemühen.</p> <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Doch, sind sie. Aber ohne geeignetes Debugging wird man wohl nicht feststellen, wo der Hund begraben ist.</p> <blockquote> <p>Das Eingabeformat findest du, wie dedlfix sagte, im http-Header (dazu musst du die Inhalte allerdings anders anfordern, file_get_contents ist da ungenügend, da dass nur die Antwort, nicht aber den Antwort-Header liefert) falls du es automatisch auslesen lassen willst (was sicher die nachhaltig gesehen bessere Variante ist), [...]</p> </blockquote> <p>Allein ist es ungenügend, ja. Aber die Header eines file_get_content('http(s)://...')-Aufrufs stehen in $http_response_header zur Verfügung.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642831#m1642831 Auge 2015-06-12T09:14:07Z 2015-06-12T09:14:07Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <p>Wenn ich anschließend den Inhalt von $node2->nodeValue mit var_dump ausgebe, kommt schon Umlaut-Müll heraus.</p> </blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Hmm, ich rufe <a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html" rel="nofollow noopener noreferrer">die SR-Seite</a> auf. Der Header sagt laut Live HTTP headers, die Seite sei UTF-8-kodiert. Der Header sagt laut den Seiteninformationen, die mehrere Browser (Firefox, Chromium) liefern, die Seite sei UTF-8-kodiert. Die Umlaute werden mit der angegebenen Kodierung korrekt dargestellt, was darauf schließen lässt, dass die Angabe den tatsachen entspricht.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642835#m1642835 glupto 2015-06-12T09:16:37Z 2015-06-12T09:16:37Z Korrektur meines vorherigen Postings <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Aber im header der sr-online-Seite wird das Ganze auch als utf8 deklariert. Oder ist der Quelltext da nicht zuverlässig als Angabe.</p> <blockquote> <p>Was dedlfix dir sagen wollte ist, dass du irgendwo in deinem Skript zwischen dem Einlesen der Daten (was du aktuell mit file_get_contents tust) und der Ausgabe eine (korrekte) Konvertierung vornehmen musst. Dazu brauchst du zwei Informationen: das Eingabeformat (das musst du rausbekommen) und das Ausgabeformat (hier UTF-8).</p> </blockquote> <p>ich hatte doch ursprünglich eine Ausgabe mit utf8-decode drin, die sorgt doch auch dafür, dass alle Umlaute korrekt dargestellt werden, nur halt die vermaledeiten Anführungsstriche nicht.</p> <blockquote> <p>@Edit: Du könntest die Inhalte beispielsweise über <a href="http://php.net/manual/en/function.http-get.php" rel="noopener noreferrer">http_get</a> anfordern oder die Klassen <a href="http://php.net/manual/en/class.httprequest.php" rel="noopener noreferrer">HttpRequest</a>/<a href="http://php.net/manual/en/class.httpmessage.php" rel="noopener noreferrer">HttpMessage</a> nutzen.</p> </blockquote> <p>werde mich mal mit http_get usw befassen, hoffe, dass das dann auch nützt. Danke für die Hilfe!</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642833#m1642833 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-12T09:15:08Z 2015-06-12T09:15:08Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Doch, sind sie. Aber ohne geeignetes Debugging wird man wohl nicht feststellen, wo der Hund begraben ist.</p> </blockquote> <p>Okay, ich gebs zu. Meine Aussage war geraten ;)</p> <blockquote> <blockquote> <p>Das Eingabeformat findest du, wie dedlfix sagte, im http-Header (dazu musst du die Inhalte allerdings anders anfordern, file_get_contents ist da ungenügend, da dass nur die Antwort, nicht aber den Antwort-Header liefert) falls du es automatisch auslesen lassen willst (was sicher die nachhaltig gesehen bessere Variante ist), [...]</p> </blockquote> <p>Allein ist es ungenügend, ja. Aber die Header eines file_get_content('http(s)://...')-Aufrufs stehen in $http_response_header zur Verfügung.</p> </blockquote> <p>Ah, sehr gut. Wieder was dazugelernt. Das ist dann natürlich einfacher als über die http-Funktionen.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642846#m1642846 glupto 2015-06-12T10:34:17Z 2015-06-12T10:34:17Z Korrektur meines vorherigen Postings <blockquote> <p>Tach!</p> <blockquote> <blockquote> <p>Wenn ich anschließend den Inhalt von $node2->nodeValue mit var_dump ausgebe, kommt schon Umlaut-Müll heraus.</p> </blockquote> </blockquote> <p>Beim Ausgeben findet wieder eine Interpretation statt, denn das ausgebende System muss ja aus den Daten entnehmen, welche Zeichen es auf die Ausgabe zu schreiben hat. Deswegen ist es bei Kodierungsproblemen ratsam, auch diese Fehlerquelle auszuschließen. Das kann man tun, indem man sich nicht das Ergebnis der (Fehl)interpretation sondern erstmal die Daten selbst anschaut. Nimm echo urlencode() und lass das var_dump() in dem Fall mal weg. Das nimmst du gleich nach dem file_get_contents().</p> </blockquote> <p>ABer mal so gefragt: VOR dem file_get_contents habe ich doch gar keinen String, den ich mit urlencode() ausgeben könnte, also keine "reinen" Daten?</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642839#m1642839 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-12T09:59:43Z 2015-06-12T09:59:43Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Hmm, ich rufe <a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html" rel="nofollow noopener noreferrer">die SR-Seite</a> auf. Der Header sagt laut Live HTTP headers, die Seite sei UTF-8-kodiert. Der Header sagt laut den Seiteninformationen, die mehrere Browser (Firefox, Chromium) liefern, die Seite sei UTF-8-kodiert. Die Umlaute werden mit der angegebenen Kodierung korrekt dargestellt, was darauf schließen lässt, dass die Angabe den tatsachen entspricht.</p> </blockquote> <p>Autsch, haut mich doch nicht alle xD dedlfix war schneller ;)</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642841#m1642841 Camping_RIDER janosch.zoller@gmx.de http://www.campingrider.de 2015-06-12T10:05:30Z 2015-06-12T10:05:30Z Korrektur meines vorherigen Postings <p>Aloha ;)</p> <blockquote> <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Aber im header der sr-online-Seite wird das Ganze auch als utf8 deklariert. Oder ist der Quelltext da nicht zuverlässig als Angabe.</p> </blockquote> <p>Du hast Recht, dahingehend war das eine Fehleinschätzung meinerseits.</p> <blockquote> <blockquote> <p>Was dedlfix dir sagen wollte ist, dass du irgendwo in deinem Skript zwischen dem Einlesen der Daten (was du aktuell mit file_get_contents tust) und der Ausgabe eine (korrekte) Konvertierung vornehmen musst. Dazu brauchst du zwei Informationen: das Eingabeformat (das musst du rausbekommen) und das Ausgabeformat (hier UTF-8).</p> </blockquote> <p>ich hatte doch ursprünglich eine Ausgabe mit utf8-decode drin, die sorgt doch auch dafür, dass alle Umlaute korrekt dargestellt werden, nur halt die vermaledeiten Anführungsstriche nicht.</p> </blockquote> <p>Naja, das ist ja auch Müll. utf8_decode erzeugt eine ISO-Zeichenkette aus UTF8 und du willst eine UTF8-Zeichenkette haben.</p> <blockquote> <blockquote> <p>@Edit: Du könntest die Inhalte beispielsweise über <a href="http://php.net/manual/en/function.http-get.php" rel="noopener noreferrer">http_get</a> anfordern oder die Klassen <a href="http://php.net/manual/en/class.httprequest.php" rel="noopener noreferrer">HttpRequest</a>/<a href="http://php.net/manual/en/class.httpmessage.php" rel="noopener noreferrer">HttpMessage</a> nutzen.</p> </blockquote> <p>werde mich mal mit http_get usw befassen, hoffe, dass das dann auch nützt. Danke für die Hilfe!</p> </blockquote> <p>Der von dedlfix erwähnte (und mir bisher nicht bekannte) $http_response_header ist vielleicht die einfachere Alternative.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642842#m1642842 Auge 2015-06-12T10:08:33Z 2015-06-12T10:08:33Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <p>Klar. Weil deine Header-Daten sagen "ich bin UTF-8" und die Daten unter http://www.sr....html offensichtlich nicht UTF-8 sind.</p> </blockquote> <p>Aber im header der sr-online-Seite wird das Ganze auch als utf8 deklariert. Oder ist der Quelltext da nicht zuverlässig als Angabe.</p> </blockquote> <p>Wie schon mehrfach geschrieben wurde, nein. Die Angabe im HTML-Dokument ist erstens nicht zuverlässig, weil der Server eine andere, abweichende Angabe machen kann und zweitens – und noch viel wichtiger –, weil das Dokument von gänzlich anderer Kodierung sein kann. Die Angabe im HTML-Quelltext ist, wie schon mehrfach geschrieben wurde, ein Etikett, mehr nicht.</p> <p>Konkret ist die Angabe im Quelltext der Seite des SR aber zutreffend. Dort steht UTF-8 und <strong>es ist tatsächlich UTF-8</strong>.</p> <blockquote> <p>ich hatte doch ursprünglich eine Ausgabe mit utf8-decode drin, die sorgt doch auch dafür, dass alle Umlaute korrekt dargestellt werden, nur halt die vermaledeiten Anführungsstriche nicht.</p> </blockquote> <p>Vergiss vorläufig die Anführungsstriche. Dass diese durch dein <code>htmlspecialchars</code> mehrfach maskiert werden, da sie es schon auf der Seite vom SR schon sind, wurde auch schon mehrfach angemerkt. Was jetzt erst einmal wichtiger ist, ist der korrekte Umgang deines Skripts mit den gelieferten Daten bei der Weiterverarbeitung und Ausgabe. Wenn das steht, ist der Umgang mit bereits maskierten Inhalten nur noch eine Dreingabe.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642847#m1642847 Auge 2015-06-12T10:35:55Z 2015-06-12T10:35:55Z Korrektur meines vorherigen Postings <p>Hallo</p> <p>Ahem. Da steht (Hervorhebung von mir):</p> <blockquote> <blockquote> <p>… Das nimmst du gleich <strong>nach</strong> dem file_get_contents().</p> </blockquote> <p>ABer mal so gefragt: VOR dem file_get_contents habe ich doch gar keinen String, den ich mit urlencode() ausgeben könnte, also keine "reinen" Daten?</p> </blockquote> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642849#m1642849 glupto 2015-06-12T10:51:23Z 2015-06-12T10:51:23Z Korrektur meines vorherigen Postings <blockquote> <p>Hallo</p> <p>Ahem. Da steht (Hervorhebung von mir):</p> <blockquote> <blockquote> <p>… Das nimmst du gleich <strong>nach</strong> dem file_get_contents().</p> </blockquote> </blockquote> </blockquote> <p>Ich hatte Deinen Text so verstanden: VOR DEM file_get_contents nimmst Du urlencode, danach var_dump</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642850#m1642850 glupto 2015-06-12T10:57:24Z 2015-06-12T10:57:24Z Korrektur meines vorherigen Postings <p>das urlencode ergibt sehr viele Zeichen, die mir aber so ohne weiteres nicht weiterhelfen. Vielleicht bitte ich sr-online doch noch mal auf Knien, sich einen rss-feed zuzulegen.</p> <p>Das htmlspecialchars hatte ich übrigens längst rausgenommen.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642851#m1642851 Auge 2015-06-12T11:02:06Z 2015-06-12T11:02:06Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <blockquote> <blockquote> <p>… Das nimmst du gleich <strong>nach</strong> dem file_get_contents().</p> </blockquote> </blockquote> </blockquote> <p>Ich hatte Deinen Text so verstanden: VOR DEM file_get_contents nimmst Du urlencode, danach var_dump</p> </blockquote> <p>Nein. Dedlfix (nicht ich) sagte, lasse dir nach jedem Bearbeitungsschritt den Variableninhalt mit <code>urlencode</code> <strong>statt</strong> <code>var_dump</code> anzeigen, weil man damit sofort sieht, was in dem String drin steht.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642852#m1642852 Auge 2015-06-12T11:03:50Z 2015-06-12T11:03:50Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <p>das urlencode ergibt sehr viele Zeichen, die mir aber so ohne weiteres nicht weiterhelfen.</p> </blockquote> <p>Dann zeige sie doch endlich einmal her. Natürlich jeweils mit Angabe des Schrittes, nach dem <em>genau diese</em> Ausgabe erfolgte.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642853#m1642853 dedlfix 2015-06-12T11:12:14Z 2015-06-12T11:12:14Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <p>das urlencode ergibt sehr viele Zeichen, die mir aber so ohne weiteres nicht weiterhelfen.</p> </blockquote> <p>Es gibt dir den Text aus, der sollte relativ gut lesbar sein. Zumindest der normale Text ohne Umlaute muss zu erkenen sein. Satzzeichen und Umlaute werde von urlencode() in URL-Kodierung (prozentkodiert) dargestellt. Die Alternative dazu wäre bin2hex(), aber da kann man gar nichts im Klartext erkennen, nur die Bytewerte.</p> <p>file_get_contents() liefert dir HTML-Code. Darin sind recht viele Nicht-Buchstaben enthalten. Die werden natürlich von urlencode() prozentkodiert. Große Teile davon interessieren nicht weiter, nur die Stellen, an denen deine Nutzdaten stehen. Such dir im Original einfach eine signifikante Textstelle, in dessen Nähe ein Umlaut vorkommt. Such diese in der Ausgabe und dann schau wie der Umlaut aussieht. Dann gehts weiter mit deiner Verarbeitung und dem Prüfen, was daraus kommt. Gegebenenfalls vorher und nachher ausgeben lassen, nicht dass du einen Zwischenschritt zur vorhergehenden Verarbeitung übersehen hast.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642854#m1642854 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T11:13:50Z 2015-06-12T11:13:50Z Korrektur meines vorherigen Postings <blockquote> <p>Hallo</p> <blockquote> <p>das urlencode ergibt sehr viele Zeichen, die mir aber so ohne weiteres nicht weiterhelfen.</p> </blockquote> <p>Dann zeige sie doch endlich einmal her. Natürlich jeweils mit Angabe des Schrittes, nach dem <em>genau diese</em> Ausgabe erfolgte.</p> </blockquote> <p>Das kommt bei echo URLENCODE, das direkt nach file_get_contents erfolgte:</p> <blockquote> <p>url: %3C%21--+quirks+mode+please+--%3E%0A%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3C%21DOCTYPE+html+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+XHTML+1.0+Strict%2F%2FEN%22+%22http%3A%2F%2Fwww.w3.org%2FTR%2Fxhtml1%2FDTD%2Fxhtml1-strict.dtd%22%3E%0A%3C%21--+Bereichskonfiguration+ermitteln+%28erforderlich+f%C3%BCr+showBannerAlways+-+wenn+TRUE%2C%0Adann+auf+Folgeseiten+auch+den+Titel+ausspielen+%28f%C3%BCr+Nachritenseiten%29+--%3E%0A%3C%21--+bei+xRed+ist+das+Erstelldatum+bereits+im+Text%2C+deswegen+leer+lassen+--%3E%0A%3C%21--+............................................................++--%3E%0A%3Chtml+xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22+xml%3Alang%3D%22de%22+lang%3D%22de%22%3E%3Chead%3E%3C%21--%5Bif+IE+8%5D%3E%3Cmeta+http-equiv%3D%22X-UA-Compatible%22+content%3D%22IE%3DEmulateIE7%22+%2F%3E%3C%21%5Bendif%5D--%3E%3Cmeta+http-equiv%3D%22X-UA-Compatible%22+content%3D%22IE%3Dedge%2Cchrome%3D1%22+%2F%3E%3C%21--+baseURL%3A+%2Fsronline+--%3E%3Cmeta+content%3D%22text%2Fjavascript%22+http-equiv%3D%22Content-Script-Type%22%2F%3E%3Cmeta+content%3D%22Hoerfunknachrichten+Import%22+name%3D%22keywords%22%2F%3E%3Cmeta+content%3D%22Hoerfunknachrichten+Import%22+name%3D%22DC.Subject%22%2F%3E%3Cmeta+content%3D%22Berlin%3A+Bundestag+verabschiedet+IT-Sicherheitsgesetz%22+name%3D%22description%22%2F%3E%3Cmeta+content%3D%22Berlin%3A+Bundestag+verabschiedet+IT-Sicherheitsgesetz%22+name%3D%22DC.description%22%2F%3E%3Cmeta+content%3D%22Saarl%C3%A4ndischer+Rundfunk%22+name%3D%22DC.publisher%22%2F%3E%3Clink+href%3D%22%2Fsronline%2Fimages%2Ficons%2Ffavicon.ico%22+rel%3D%22shortcut+icon%22%2F%3E%3Clink+media%3D%22screen%2C+projection%2C+print%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fcss%2Fsronline.css%22%2F%3E%3C%21--%5Bif+IE%5D%3E%3Clink+media%3D%22screen%2C+projection%2C+print%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fcss%2Fsronline_ie.css%22%2F%3E%3C%21%5Bendif%5D--%3E%3C%21--%5Bif+lt+IE+6.0%5D%3E%3Clink+media%3D%22screen%2C+projection%2C+print%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fcss%2Fsronline_ie5.css%22%2F%3E%3C%21%5Bendif%5D--%3E%3C%21--%5Bif+IE+10%5D%3E%3Clink+media%3D%22screen%2C+projection%2C+print%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fcss%2Fsronline_ie10.css%22%2F%3E%3C%21%5Bendif%5D--%3E%3Clink+media%3D%22handheld%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fpda.css%22%2F%3E%3Cscript+src%3D%22%2Fsronline%2Fjs%2Fsronline.js%22+type%3D%22text%2Fjavascript%22%3E%3B%3C%2Fscript%3E%3Cscript+src%3D%22%2Fsronline%2Fjs%2Fhome.js%22+type%3D%22text%2Fjavascript%22%3E%3B%3C%2Fscript%3E%3Cscript+src%3D%22%2F%2Fscript.ioam.de%2Fiam.js%22+type%3D%22text%2Fjavascript%22%3E%3B%3C%2Fscript%3E%3Clink+media%3D%22screen%2C+projection%2C+print%22+type%3D%22text%2Fcss%22+rel%3D%22stylesheet%22+href%3D%22%2Fsronline%2Fcss%2Fnachrichten.css%22%2F%3E%3Ctitle%3ESR-online%3A+H%C3%B6rfunknachrichten%2C+12.06.2015+12%3A10+Uhr%3C%2Ftitle%3E%3C%2Fhead%3E%3Cbody%3E%3Cdiv+class%3D%22unsichtbar%22%3E%3Ch1%3EDirektanwahl+von+Seitenabschnitten%3C%2Fh1%3E%3Cul%3E%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E1.+%3C%2Fdfn%3E%3Ca+href%3D%22%23bereichsnavigation%22%3EWechsel+des+Hauptbereichs%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E2.+%3C%2Fdfn%3E%3Ca+href%3D%22%23navigation%22%3EMen%C3%BC+des+aktuellen+Hauptbereichs%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E3.+%3C%2Fdfn%3E%3Ca+href%3D%22%23inhalt%22%3ETextinhalt+dieser+Seite%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E4.+%3C%2Fdfn%3E%3Ca+href%3D%22%23rechte_spalte%22%3EAbschnitt+mit+Teasern%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%3C%2Ful%3E%3C%2Fdiv%3E%3Cdiv+id%3D%22rahmen1%22%3E%3Cdiv+id%3D%22oben_navi%22%3E%3Cul%3E%3Cli%3E%3Ca+title%3D%221.+SR-online.de+Startseite.%22+href%3D%22%2Fsronline%2Findex.html%22%3E%3Cimg+width%3D%22140%22+height%3D%2230%22+title%3D%221.+SR-online.%22+alt%3D%22SR-online%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_logo_sronline.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+name%3D%22bereichsnavigation%22%2F%3E%3Ca+title%3D%222.+Nachrichten.%22+href%3D%22%2Fsronline%2Fnachrichten%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2281%22+height%3D%2218%22+title%3D%222.+Nachrichten.%22+alt%3D%22Nachrichten%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_nachrichten_hi.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%225.+Sport.%22+href%3D%22%2Fsronline%2Fsport%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2240%22+height%3D%2218%22+title%3D%225.+Sport.%22+alt%3D%22Sport%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_sport_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%223.+Kultur.%22+href%3D%22%2Fsronline%2Fkultur%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2244%22+height%3D%2218%22+title%3D%223.+Kultur.%22+alt%3D%22Kultur%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_kultur_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%224.+Land+%26+Leute.%22+href%3D%22%2Fsronline%2Fland_leute%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2284%22+height%3D%2218%22+title%3D%224.+Land+%26+Leute.%22+alt%3D%22Land+%26+Leute%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_landleute_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%226.+Wissen.%22+href%3D%22%2Fsronline%2Fwissen%2Ftipps_und_ratgeber%2F%22%3E%3Cimg+width%3D%2254%22+height%3D%2218%22+title%3D%226.+Wissen.%22+alt%3D%22Wissen%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_ratgeber_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%2212.+DingXX.%22+href%3D%22%2Fsronline%2Fdingxx%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2251%22+height%3D%2218%22+title%3D%2212.+DingXX.%22+alt%3D%22DingXX%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_dingxx_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%227.+SR+Fernsehen.%22+href%3D%22%2Fsronline%2Fsr_fernsehen%2Fuebersicht%2Findex.html%22%3E%3Cimg+width%3D%2271%22+height%3D%2218%22+title%3D%227.+SR+Fernsehen.%22+alt%3D%22SR+Fernsehen%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_fernsehen_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%228.+SR+1+Europawelle.%22+href%3D%22%2Fsronline%2Fsr1%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2234%22+height%3D%2218%22+title%3D%228.+SR+1+Europawelle.%22+alt%3D%22SR+1+Europawelle%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_sr1_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%229.+SR+2+KulturRadio.%22+href%3D%22%2Fsronline%2Fsr2%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2234%22+height%3D%2218%22+title%3D%229.+SR+2+KulturRadio.%22+alt%3D%22SR+2+KulturRadio%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_sr2_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%2210.+SR+3+Saarlandwelle.%22+href%3D%22%2Fsronline%2Fsr3%2Fuebersicht%2F%22%3E%3Cimg+width%3D%2235%22+height%3D%2218%22+title%3D%2210.+SR+3+Saarlandwelle.%22+alt%3D%22SR+3+Saarlandwelle%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_sr3_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%2211.+Deutsche+Radiophilharmonie.%22+href%3D%22http%3A%2F%2Fwww.drp-orchester.de%22%3E%3Cimg+width%3D%2233%22+height%3D%2218%22+title%3D%2211.+Deutsche+Radiophilharmonie.%22+alt%3D%22Deutsche+Radiophilharmonie%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_drp_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%2212.+Der+SR.%22+href%3D%22%2Fsronline%2Fder_sr%2Findex.html%22%3E%3Cimg+width%3D%2248%22+height%3D%2218%22+title%3D%2212.+Der+SR.%22+alt%3D%22Der+SR%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_navi_dersr_lo.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3C%2Ful%3E%3C%2Fdiv%3E%3Cdiv+id%3D%22oben%22%3E%3Cimg+src%3D%22%2Fsronline%2Fimages%2Felement_oben_kopfgrafik_nachrichten.jpg%22+alt%3D%22SR-online+Nachrichten%22+title%3D%22SR-online+Nachrichten%22+height%3D%2244%22+width%3D%22750%22+complete%3D%22complete%22+alt%3D%22SR-online+Startseite%22+title%3D%22SR-online+Startseite%22+height%3D%2244%22+width%3D%22750%22%2F%3E%3C%2Fdiv%3E%3Cdiv+id%3D%22obenzeile%22%3E%3Cul%3E%3Cli%3E%3Ca+title%3D%221.+Hilfe.%22+href%3D%22%2Fsronline%2Fder_sr%2Fa-z%2Findex.html%22%3E%3Cimg+width%3D%2223%22+height%3D%2213%22+title%3D%221.+Hilfe.%22+alt%3D%221.+Hilfe.%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_hilfe.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%222.+Kontakt.%22+href%3D%22%2Fsronline%2Fder_sr%2Fkontakt%2Findex.html%22%3E%3Cimg+width%3D%2227%22+height%3D%2213%22+title%3D%222.+Kontakt.%22+alt%3D%222.+Kontakt.%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_kontakt.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3Cli%3E%3Ca+title%3D%223.+Impressum.%22+href%3D%22%2Fsronline%2Fder_sr%2Funternehmen%2Fimpressum%2Findex.html%22%3E%3Cimg+width%3D%2267%22+height%3D%2213%22+title%3D%223.+Impressum.%22+alt%3D%223.+Impressum.%22+src%3D%22%2Fsronline%2Fimages%2Felement_oben_impressum.gif%22%2F%3E%3C%2Fa%3E%3C%2Fli%3E%3C%2Ful%3E%3C%2Fdiv%3E%3Cdiv+id%3D%22rahmen2%22%3E%3Cdiv+id%3D%22rahmen3%22%3E%3Cdiv+class%3D%22spalte%22+id%3D%22links%22%3E%3Cdiv+id%3D%22links_dynamisch%22%3E%0A%3Ca+name%3D%22navigation%22%3E%3C%2Fa%3E%0A%3Cul+class%3D%22menue%22%3E%0A%3Cli+class%3D%22gewaehlt%22%3E%3Cdfn+class%3D%22unsichtbar%22%3E1.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fuebersicht%2Findex.html%22%3E%C3%9Cbersicht%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli+class%3D%22gewaehlt%22%3E%3Cspan+class%3D%22unsichtbar%22%3EGew%26auml%3Bhlt%3A+%3C%2Fspan%3E%3Cdfn+class%3D%22unsichtbar%22%3E2.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fhoerfunknachrichten%2Findex.html%22%3EH%C3%B6rfunknachrichten%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3Cul+class%3D%22submenue%22%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E1.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fhoerfunknachrichten%2Fredaktion%2Findex.html%22%3ERedaktion%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E2.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fhoerfunknachrichten%2Farchiv%2Findex.html%22%3EArchiv%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3C%2Ful%3E%0A%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E3.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fregionalnachrichten%2Findex.html%22%3ERegionalnachrichten%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E4.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fpolitik_wirtschaft%2Findex.html%22%3EPolitik+%26+Wirtschaft%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E5.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fpanorama%2Findex.html%22%3EPanorama%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E6.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fdossiers%2Findex.html%22%3EDossiers%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E7.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fgewinnzahlen%2Findex.html%22%3EGewinnzahlen%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E8.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fwetter%2Findex.html%22%3EWetter%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3Cli%3E%3Cdfn+class%3D%22unsichtbar%22%3E9.%3C%2Fdfn%3E%3Ca+href%3D%22%2Fsronline%2Fnachrichten%2Fverkehr%2Findex.html%22%3EVerkehr%3C%2Fa%3E%3Cspan+class%3D%22unsichtbar%22%3E.+%3C%2Fspan%3E%3C%2Fli%3E%0A%3C%2Ful%3E%3C%2Fdiv%3E%3Cdiv+id%3D%22links_statisch%22%3E%0A%3Cul+class%3D%22menue%22%3E%0A%3Cli%3E%3Ca+title%3D</p> </blockquote> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642856#m1642856 Auge 2015-06-12T11:31:38Z 2015-06-12T11:33:26Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <p>Dann zeige sie doch endlich einmal her. Natürlich jeweils mit Angabe des Schrittes, nach dem <em>genau diese</em> Ausgabe erfolgte.</p> </blockquote> <p>Das kommt bei echo URLENCODE, das direkt nach file_get_contents erfolgte:</p> </blockquote> <p>Ok, ja und doch nein. Das ist der leider unvollständige Quelltext der ganzen Seite. Ich vermute, dass hier eine Größenbeschränkung der Postings im Forum zuschlägt. Der eigentliche (<strong>aktuelle</strong> (2015-06-12 13:29)) Nutzinhalt der <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642725#m1642725" rel="noopener noreferrer">in diesem Posting</a> verlinkten <a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html" rel="nofollow noopener noreferrer">Seite</a> ist jedenfalls nicht zu finden. Dessen umlautlose Textteile sollten nicht von <code>urlencode</code> angefasst und deshalb mit der browsereigenen Suchfunktion auffindbar sein. Das sind sie aber nicht.</p> <p>Nocheinmal <em>etwas</em> anders. Du holst dir ja mit</p> <pre><code class="block language-php"><span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$xPath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"//div[@class=\"mitte_folgeseiten\"]/ul/li/a"</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$element</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> </code></pre> <p>oder ähnlichem einzelne Blöcke aus dem Quelltext. Kannst du bitte einen dieser Blöcke <em>direkt</em> nach der Extraktion aber noch <em>vor der Weiterverarbeitung</em> durch <code>urlencode</code> schicken und hier die Ausgabe posten? Damit sollten wir eher zu den relevanten Teilen vorstoßen.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642857#m1642857 dedlfix 2015-06-12T11:46:48Z 2015-06-12T11:46:48Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <p>Das kommt bei echo URLENCODE, das direkt nach file_get_contents erfolgte:</p> </blockquote> <p>Schön wäre es noch gewesen, wenn du die URL dazu genannt hättest. Ich wusste nämlich grad nicht, welcher Text da steht, den ich hätte in der Ausgabe suchen können. Gefunden habe ich aber diese Stelle</p> <blockquote> <p>SR-online%3A+H%C3%B6rfunknachrichten%2C+12.06.2015+12%3A10+Uhr</p> </blockquote> <p>Übersetzt heißt das: SR-online: Hörfunknachrichten, 12.06.2015 12:10 Uhr<br> Zu sehen ist das ö als %C3%B6, also offensichtlich UTF-8-kodiert.</p> <p>Finden kann man das in dem urlencode-Wust, wenn man nach zum Beispiel rfunkn sucht, also ohne ö, von dem man nicht weiß, wie es kodiert sein wird.</p> <p>Besser wäre es, genau nach dem Text suchen zu können, den du nach deinem nächsten Schritt extrahierst. Problematische Zeichen sollte er enthalten, damit man die dann als vorher und nachher vergleichen kann.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642865#m1642865 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T12:49:58Z 2015-06-12T12:49:58Z Korrektur meines vorherigen Postings <blockquote> <blockquote></blockquote> <p>Nocheinmal <em>etwas</em> anders. Du holst dir ja mit</p> <pre><code class="block language-php"><span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$xPath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"//div[@class=\"mitte_folgeseiten\"]/ul/li/a"</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$element</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> </code></pre> <p>oder ähnlichem einzelne Blöcke aus dem Quelltext. Kannst du bitte einen dieser Blöcke <em>direkt</em> nach der Extraktion aber noch <em>vor der Weiterverarbeitung</em> durch <code>urlencode</code> schicken und hier die Ausgabe posten? Damit sollten wir eher zu den relevanten Teilen vorstoßen.</p> </blockquote> <p>Hier habe ich es so gemacht, wie Du vorschlägst - zufällig ist es auch wieder ein Text mit den ominösen Anführungszeichen:</p> <pre><code class="block">url: Die+Stadtverwaltung+hat+die+Baugenehmigung+f%C3%83%C2%BCr+das+geplante+Gro%C3%83%C2%9Fbordell+im+V%C3%83%C2%B6lklinger+Stadtteil+Fenne+erteilt.%0AS%C3%83%C2%A4mtliche+Auflagen+seien+vom+Bauherr+erf%C3%83%C2%BCllt+worden.+Das+umstrittene+Bordell+soll+in+der+ehemaligen+%E2%80%9EGlash%C3%83%C2%BCttenhalle%E2%80%9C%E2%80%82entstehen.+Die+Pl%C3%83%C2%A4ne+hatten+heftige+Proteste+in+der+Bev%C3%83%C2%B6lkerung+ausgel%C3%83%C2%B6st.%0ANach+Angaben+der+Stadt+wurde+letztlich+nur+ein+Tagesbordell+mit+41+Zimmern+genehmigt.+Der+Betrieb+ist+damit+nur+zwischen+6+bis+22+Uhr+erlaubt.+Ursp%C3%83%C2%BCnglich+waren+60+Zimmer+vorgesehen.%0AOberb%C3%83%C2%BCrgermeister+Lorig+sagte+dem+SR%2C+man+habe+das+Vorhaben+nur+verz%C3%83%C2%B6gern%2C+rechtlich+aber+nicht+verhindern+k%C3%83%C2%B6nnen.%0A </code></pre> <p>Ausgegeben wird das bei mir mit utf8_decode:</p> <blockquote> <p>Die Stadtverwaltung hat die Baugenehmigung für das geplante Großbordell im Völklinger Stadtteil Fenne erteilt. Sämtliche Auflagen seien vom Bauherr erfüllt worden. Das umstrittene Bordell soll in der ehemaligen ?Glashüttenhalle??entstehen. Die Pläne hatten heftige Proteste in der Bevölkerung ausgelöst. Nach Angaben der Stadt wurde letztlich nur ein Tagesbordell mit 41 Zimmern genehmigt. Der Betrieb ist damit nur zwischen 6 bis 22 Uhr erlaubt. Urspünglich waren 60 Zimmer vorgesehen. Oberbürgermeister Lorig sagte dem SR, man habe das Vorhaben nur verzögern, rechtlich aber nicht verhindern können.</p> </blockquote> <p>Ohne utf8_decode:</p> <blockquote> <p>Die Stadtverwaltung hat die Baugenehmigung für das geplante Großbordell im Völklinger Stadtteil Fenne erteilt. Sämtliche Auflagen seien vom Bauherr erfüllt worden. Das umstrittene Bordell soll in der ehemaligen „Glashüttenhalle“ entstehen. Die Pläne hatten heftige Proteste in der Bevölkerung ausgelöst. Nach Angaben der Stadt wurde letztlich nur ein Tagesbordell mit 41 Zimmern genehmigt. Der Betrieb ist damit nur zwischen 6 bis 22 Uhr erlaubt. Urspünglich waren 60 Zimmer vorgesehen. Oberbürgermeister Lorig sagte dem SR, man habe das Vorhaben nur verzögern, rechtlich aber nicht verhindern können.</p> </blockquote> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642866#m1642866 Auge 2015-06-12T13:28:36Z 2015-06-12T13:29:24Z Korrektur meines vorherigen Postings <p>Hallo</p> <blockquote> <blockquote> <p>Kannst du bitte einen dieser Blöcke <em>direkt</em> nach der Extraktion aber noch <em>vor der Weiterverarbeitung</em> durch <code>urlencode</code> schicken und hier die Ausgabe posten? Damit sollten wir eher zu den relevanten Teilen vorstoßen.</p> </blockquote> <p>Hier habe ich es so gemacht, wie Du vorschlägst - zufällig ist es auch wieder ein Text mit den ominösen Anführungszeichen:</p> <pre><code class="block">url: Die+Stadtverwaltung+hat+die+Baugenehmigung+f%C3%83%C2%BCr+das+geplante+Gro%C3%83%C2%9Fbordell … </code></pre> </blockquote> <p>So, da z.B. das „ü“ im Wort „für“ in zwei Bytes (<code>%C3%83</code> und <code>%C2%BC</code>) kodiert wurde, konstatieren wir, dass der Text bei dir UTF-8-kodiert <strong>ankommt</strong>.</p> <blockquote> <p>Ausgegeben wird das bei mir mit utf8_decode:</p> <blockquote> <p>Die Stadtverwaltung hat die Baugenehmigung für das geplante Großbordell …</p> </blockquote> <p>Ohne utf8_decode:</p> <blockquote> <p>Die Stadtverwaltung hat die Baugenehmigung für das geplante Großbordell …</p> </blockquote> </blockquote> <p>Das bestätigt die Vermutung einiger, dass hier <em><strong>irgendwo</strong> auf deiner Seite</em> etwas schief läuft. Die Seite wird offensichtlich ISO-8859-1- statt UTF-8-kodiert ausgeliefert, sonst wäre der mit <code>utf8_decode</code> behandelte Text verstümmelt und der UTF-8-kodierte Text nicht.</p> <p>Deshalb noch ein paar Fragen?</p> <ol> <li>Ist dein PHP-Skript selbst UTF-8-kodiert?</li> <li>Hast du schon mal nach dem Wert für <code>default_charset</code> in der Ausgabe der Funktion <code>php_info</code> geschaut?</li> <li>Ist der Quelltext, den du hier gezeigt hast, vollständig oder sind da Teile, z.B. mit Stringfunktionen, die du <em>hier</em> weggelassen hast?</li> <li>Hast du in der PHP-Dokumentation für die von dir benutzten Funktionen nach eventuell vorhandenen Parametern für die Zeichenkodierung geschaut?</li> </ol> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642870#m1642870 dedlfix 2015-06-12T14:10:24Z 2015-06-12T14:10:24Z Korrektur meines vorherigen Postings <p>Tach!</p> <blockquote> <p>Hier habe ich es so gemacht, wie Du vorschlägst - zufällig ist es auch wieder ein Text mit den ominösen Anführungszeichen:</p> <pre><code class="block">Die+Stadtverwaltung+hat+die+Baugenehmigung+f%C3%83%C2%BCr+das+geplante+Gro%C3%83%C2%9Fbordell+im+V%C3%83%C2%B6lklinger+Stadtteil+Fenne+erteilt. </code></pre> </blockquote> <p>Da sieht man, dass da 4 Bytes für Umlaute verwendet wurden. Da ist also schon eine doppelte UTF-8-Kodierung in den Daten. Das kann passieren, wenn man UTF-8 mit utf8encode() behandelt.</p> <blockquote> <p>Ausgegeben wird das bei mir mit utf8_decode:</p> <blockquote> <p>Das umstrittene Bordell soll in der ehemaligen ?Glashüttenhalle??entstehen.</p> </blockquote> </blockquote> <p>Ja, dazu die Daten sehen so aus: > Das+umstrittene+Bordell+soll+in+der+ehemaligen+%E2%80%9EGlash%C3%83%C2%BCttenhalle%E2%80%9C%E2%80%82entstehen</p> <p>Das erste Anführungszeichen ist <a href="http://www.fileformat.info/info/unicode/char/201E/index.htm" rel="nofollow noopener noreferrer">dieses da</a>, Bytefolge: E2 80 9E. Das kann utf8decode() nicht in ISO-8859-1 umkodieren, weil es dieses Zeichen in der Kodierung nicht gibt. Resultat ist dann ein Fragezeichen.</p> <p>Bemerkenswert ist, dass das Anführungszeichen einfach UTF-8-kodiert ist, während die Umlaute zweifach kodiert sind. Aber war es nicht so, dass Umlaute direkt im Code der Seite standen und die Anführungszeichen als Entity? Da hat jemand die Entitys weginterpretiert (die DOM-Funktionen vermutlich). Und davor fand vermutlich eine überflüssige UTF-8-Kodierung von bereits UTF-8-Daten statt.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642867#m1642867 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T13:42:07Z 2015-06-12T13:56:27Z Korrektur meines vorherigen Postings <blockquote> <p>Das bestätigt die Vermutung einiger, dass hier <em><strong>irgendwo</strong> auf deiner Seite</em> etwas schief läuft. Die Seite wird offensichtlich ISO-8859-1- statt UTF-8-kodiert ausgeliefert, sonst wäre der mit <code>utf8_decode</code> behandelte Text verstümmelt und der UTF-8-kodierte Text nicht.</p> <p>Deshalb noch ein paar Fragen?</p> <ol> <li>Ist dein PHP-Skript selbst UTF-8-kodiert?</li> <li>Hast du schon mal nach dem Wert für <code>default_charset</code> in der Ausgabe der Funktion <code>php_info</code> geschaut?</li> <li>Ist der Quelltext, den du hier gezeigt hast, vollständig oder sind da Teile, z.B. mit Stringfunktionen, die du <em>hier</em> weggelassen hast?</li> <li>Hast du in der PHP-Dokumentation für die von dir benutzten Funktionen nach eventuell vorhandenen Parametern für die Zeichenkodierung geschaut?</li> </ol> </blockquote> <ol> <li> <p>ja, ich habe es nach den ersten Kommentaren hier noch mal in den editor geladen und als utf8 ohne BOM abgespeichert und hochgeladen.</p> </li> <li> <p>default_charset ist utf8. siehe <a href="http://www.nachrichtentisch.de/_testindex.php" rel="nofollow noopener noreferrer">Linkbeschreibung</a></p> </li> <li> <p>Der Quelltext ist vollständig, das sieht jetzt in der php-Datei so aus:</p> </li> </ol> <pre><code class="block"><div class="border"><a href="http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/index.html" target='_blank'> <img src="logos/sron.jpg" alt="Saarl&auml;ndischer Rundfunk" title= "Quelle: SR" style=" margin:3px 0px 5px -45px ; padding:0px;"/></a> <ul><?php $data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-4.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ echo "url: " . urlencode($node2->nodeValue); } } ?></ul> </div> </code></pre> <ol start="4"> <li>das ist der komplette Code, weitere Funktionen benutze ich nicht.</li> </ol> <p>@edit: Inzwischen ist bei sr-online ein andere Meldung vorhanden, deshalb steht auf der Seite nicht mehr die "Bordell"-Meldung von vorhin mit den Anführungszeichen.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642868#m1642868 TS 2015-06-12T13:51:34Z 2015-06-12T13:56:48Z Korrektur meines vorherigen Postings <p>Hallo,</p> <blockquote> <ol start="3"> <li>Der Quelltext ist vollständig, das sieht jetzt in der php-Datei so aus:</li> </ol> </blockquote> <blockquote> <pre><code class="block language-php"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>border<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/index.html<span class="token punctuation">"</span></span> <span class="token attr-name">target</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">'</span>_blank<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>logos/sron.jpg<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Saarl<span class="token entity named-entity" title="&auml;">&auml;</span>ndischer Rundfunk<span class="token punctuation">"</span></span> <span class="token attr-name">title</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span> <span class="token punctuation">"</span>Quelle: SR<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span> margin:3px 0px 5px -45px ; padding:0px;<span class="token punctuation">"</span></span></span><span class="token punctuation">/></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-4.html'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$doc</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$doc</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$xPath</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMXPath</span><span class="token punctuation">(</span><span class="token variable">$doc</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$xPath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'//div/p'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$node2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$zaehler</span> <span class="token operator"><=</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"url: "</span> <span class="token operator">.</span> <span class="token function">urlencode</span><span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Nur eine ganz blöde Idee: Hast Du mal ausprobiert was passiert, wenn Du für das geparste Dokument die Kodierung angibst?</p> <pre><code class="block language-php"><span class="token variable">$doc</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>utf-8 sollte zwar eigentlich laut Doku die Defaulteinstellung sein, man weiß bei PHP aber nie :-O</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642871#m1642871 TS 2015-06-12T14:11:30Z 2015-06-12T14:11:30Z DOMDocument: Fehlerhaftes Parsing und Dekodierung, [gelöst] <p>Hallo,</p> <p>ich konnte es nicht mehr mit ansehen und habe mal eben selber gespielt. Da ich in meinem Tool, dass ich gerade bearbeite, nur drei Zeilen ändern musste, war das nicht schwer :-)</p> <p>Zuvor habe ich die Daten von SR überprüft. An denen lag es nicht!<br> Es liegt an DOMDocument.</p> <p>bitte ändere entsprechend und schau nochmal: (ob $dom oder $doc ist natürlich egal)</p> <pre><code class="block language-php"> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadXML</span><span class="token punctuation">(</span><span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Ich habe keinen Kodierungsfehler mehr gefunden.<br> Nun hoffe ich, dass ich die nicht nur übersehen habe. Ich zieh schon mal den Kopf ein ;-)</p> <p>Du lädst die Seite als HTML in den Parser, sie ist aber als XML deklaiert. Das scheint der Klasse nicht zu schmecken.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642872#m1642872 glupto 2015-06-12T14:14:07Z 2015-06-12T14:14:07Z Korrektur meines vorherigen Postings <blockquote> <p>Nur eine ganz blöde Idee: Hast Du mal ausprobiert was passiert, wenn Du für das geparste Dokument die Kodierung angibst?</p> <pre><code class="block language-php"><span class="token variable">$doc</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>utf-8 sollte zwar eigentlich laut Doku die Defaulteinstellung sein, man weiß bei PHP aber nie :-O</p> </blockquote> <p>ja, habe ich versucht, änderte nichts.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642876#m1642876 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-12T14:23:24Z 2015-06-12T14:23:24Z DOMDocument: Fehlerhaftes Parsing und Dekodierung, [gelöst] <blockquote> <p>Hallo,</p> <p>ich konnte es nicht mehr mit ansehen und habe mal eben selber gespielt. Da ich in meinem Tool, dass ich gerade bearbeite, nur drei Zeilen ändern musste, war das nicht schwer :-)</p> <p>Zuvor habe ich die Daten von SR überprüft. An denen lag es nicht!<br> Es liegt an DOMDocument.</p> <p>bitte ändere entsprechend und schau nochmal: (ob $dom oder $doc ist natürlich egal)</p> <pre><code class="block language-php"> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadXML</span><span class="token punctuation">(</span><span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>mal dumm gefragt: und dann so weiter:</p> <pre><code class="block">$xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = $node2->nodeValue; $zaehler++; </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642879#m1642879 dedlfix 2015-06-12T14:45:04Z 2015-06-12T14:45:04Z DOMDocument: Fehlerhaftes Parsing und Dekodierung, [gelöst] <p>Tach!</p> <blockquote> <pre><code class="block language-php"> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadXML</span><span class="token punctuation">(</span><span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Damit bekomme ich nur einen Haufen XML-Parser-Fehler.</p> <blockquote> <p>Du lädst die Seite als HTML in den Parser, sie ist aber als XML deklaiert. Das scheint der Klasse nicht zu schmecken.</p> </blockquote> <p>Ich kann die Seite nur mit loadHTML() laden. Und da hat eine Änderung der Konstruktorparameter von DOMDocument nichts gebracht. Das Handbuch verrät in den User-Kommentaren, dass loadHTML() ISO-8859-1 erwartet. (Meine Erfahrung hatte was von UTF-8 abgespeichert, aber das war dann wohl eine andere Situation.) Ein Trick wäre wohl die Kodierung als XML-Vorspann voranzustellen.</p> <p>$doc->loadHTML('<?xml encoding="UTF-8">' . $data);</p> <p>Damit sah die Ausgabe gut aus. Anführungszeichen waren aber leider grad keine verfügbar.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642874#m1642874 TS 2015-06-12T14:20:22Z 2015-06-12T14:20:22Z Bitte ändert doch den Betreff immer passend ab <p>Hallo nochmal,</p> <blockquote> <blockquote> <p>Nur eine ganz blöde Idee: Hast Du mal ausprobiert was passiert, wenn Du für das geparste Dokument die Kodierung angibst?</p> <pre><code class="block language-php"><span class="token variable">$doc</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>utf-8 sollte zwar eigentlich laut Doku die Defaulteinstellung sein, man weiß bei PHP aber nie :-O</p> </blockquote> <p>ja, habe ich versucht, änderte nichts.</p> </blockquote> <p>dann schau bitte jetzt hier: <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642871#m1642871" rel="noopener noreferrer">http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642871#m1642871</a>.</p> <p>Das scheint zu wirken.</p> <p>Und es sit schwer, ein Posting im Thread wiederzufinden, wenn Ihr die Betreffzeile nicht entsprechend anpasst. Diese Faulheit ist eine Unsitte hier!</p> <p>Und ich beantrage den Tag: "Lösung", der dann in Grün angezeigt wird ;-)</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642880#m1642880 dedlfix 2015-06-12T14:46:18Z 2015-06-12T14:46:18Z Bitte ändert doch den Betreff immer passend ab <p>Tach!</p> <blockquote> <p>Und ich beantrage den Tag: "Lösung", der dann in Grün angezeigt wird ;-)</p> </blockquote> <p>Brauchen wir nicht, gekennzeichnete Lösungen werden beim Ausgangsposting gesondert angezeigt.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642888#m1642888 TS 2015-06-12T15:53:01Z 2015-06-12T15:53:01Z DOMDocument: Fehlerhafte Dekodierung, Jetzt aber... <p>Hallo,</p> <blockquote> <p>mal dumm gefragt: und dann so weiter:</p> </blockquote> <p>Nee, das war auch noch falsch. Ich hatte mich verguckt und schon richtig Beulen am Kofp ;-O</p> <p>Aber nun habe ich eine Schmuddellösung gefunden, mit der es klappt.</p> <p>siehe <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642887#m1642887" rel="noopener noreferrer">http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642887#m1642887</a></p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642887#m1642887 TS 2015-06-12T15:47:06Z 2015-06-12T15:47:06Z Ätsch, war trotzdem falsch. Aber nun gibts Workaround: <p>Hallo,</p> <p>ich hab natürlich den Kopf noch möchtig eingezogen... Hatte nämlich übersehen, dass ich statt der geparsten Links die Originalseite ausgegeben hatte. Und die war ja in Ordnung.</p> <p>Aber: DOMDocument hat eine Macke, die man per Schmuddellösung umschiffen kann:</p> <pre><code class="block language-php"> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'<meta http-equiv="content-type" content="text/html; charset=utf-8">'</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das gibt zwar einen Parsing-Error, aber nun stimmt die Ausgabe. <em>tztz</em>.</p> <p>Ich teste jetzt mal, ob man diese Zeile nicht an der passenden Stelle ins Dokument stanzen kann. Da aber die SROnline-Seite ohnehin ca. 40 Parsing-Fehler produziert, ist das eigentlich auch egal.</p> <p>Bitte um Rückmeldung</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642889#m1642889 TS 2015-06-12T16:09:19Z 2015-06-12T16:09:19Z Kurzfassung <p>Hallo,</p> <p>ganz grob geht das jetzt so:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-4.html'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#file_put_contents('sr-online.de.html', $page);</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">TRUE</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">resolveExternals</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'<meta http-equiv="content-type" content="text/html; charset=utf-8">'</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$text</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">saveHTML</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">HTML</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>de<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>SR-Online<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>pre</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$text</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>pre</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Müssen noch die Warnings abgefangen werden. Siehe mein Thread dazu.<br> Und besser wäre es, den Meta-Tag an einer passenden Stelle im Dokument zu platzieren...</p> <p>Grüße<br> TS</p> <blockquote></blockquote> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642918#m1642918 TS 2015-06-13T05:42:26Z 2015-06-13T05:42:26Z Weiterführende Gedanken zur gefundenen Lösung <p>Hallo,</p> <blockquote></blockquote> <p>DOMDocument hat eine Macke, die man per Schmuddellösung umschiffen kann:<br> Bereits beim Laden des Dokumentes muss die passende Kodierung genau mit diesem <meta>-Tag (dem antiquierten aus HTML4.1) als erster Tag dieser Art angebeben werden. Das geht schmuddelig, in dem man ihn einfach "deplaced" vor das Dokument schaltet.</p> <blockquote> <pre><code class="block language-php"> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'<meta http-equiv="content-type" content="text/html; charset=utf-8">'</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das gibt zwar einen Parsing-Error, aber nun stimmt die Ausgabe. <em>tztz</em>.</p> <p>Ich teste jetzt mal, ob man diese Zeile nicht an der passenden Stelle ins Dokument stanzen kann. Da aber die SROnline-Seite ohnehin ca. 40 Parsing-Fehler produziert, ist das eigentlich auch egal.</p> </blockquote> <p>Wenn man ihn an eine passende Stelle verfrachten will (also direkt hinter dem <head> Opener-Tag), dann muss man entweder sehr viel Aufwand treiben, oder aber sich an dieser Stelle auf RegEx verlassen, also den <head ???>-Tag suchen und ersetzen durch "<head ???><meta ...>".</p> <p>Mit Aufwand habe ich es auch durchgeführt. Die Vorgehensweise sieht dann folgendermaßen aus:</p> <ul> <li>Meta-Tag als Musterdatei ablegen. Das ist einfacher, als die Node generisch zu basteln</li> <li>Meta Muster in ein eigenes Dokument laden und die <meta>-Node suchen</li> </ul> <pre><code class="block language-php"> <span class="token variable">$metanode</span> <span class="token operator">=</span> <span class="token variable">$metadom</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'meta'</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## oder wenn man ihr sinnvollerweise eine ID verpasst hat:</span> <span class="token variable">$metanode</span> <span class="token operator">=</span> <span class="token variable">$metadom</span><span class="token operator">-></span><span class="token function">getElementByID</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'meta_utf8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <ul> <li> <p>prüfen, ob $metanode wirklich geladen ist, also ungleich NULL!</p> </li> <li> <p>Originaldokument laden</p> </li> <li> <p>Meta-Node importierern</p> </li> <li> <p>importierte Meta-Node hinter dem <head>-Element plazieren</p> </li> </ul> <pre><code class="block language-php"> <span class="token variable">$newMeta</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">importNode</span><span class="token punctuation">(</span><span class="token variable">$metanode</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'head'</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">insertBefore</span><span class="token punctuation">(</span><span class="token variable">$newMeta</span><span class="token punctuation">,</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'head'</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">firstChild</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <ul> <li>Dokument mit $dom->saveHTML($var) wegschreiben in eine Variable</li> <li>Dokument erneut einlesen mit $dom->loadHTML($var);<br> die alte Instanz kann man dann getrost überschreiben damit.</li> </ul> <p>Leider wird nur so das Dokument neu geparst, was (ich habe es ausprobiert) notwendig ist, damit sich die neue <meta>-Angabe für die Kodierung auswirkt.</p> <p><em><strong>ganz schon schmuddelig</strong></em></p> <p>Es erscheint mir daher legitim, an dieser Stelle eine RegEx-Lösung zu wählen für das Auffinden des <head ???>-Opener-Tags, oder sich in diesem Spezialfall einfach darauf zu verlassen, dass dort nur "<head>" steht. Das kann man dann einfach mit str_replace() ersetzen.</p> <pre><code class="block language-php"><span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<meta http-equiv="content-type" content="text/html; charset=utf-8">'</span> <span class="token operator">.</span><span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">strpos</span><span class="token punctuation">(</span><span class="token variable">$page</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'<head>'</span><span class="token punctuation">)</span> <span class="token operator">!==</span> <span class="token constant boolean">false</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'<head>'</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"<head>\r\n<span class="token interpolation"><span class="token variable">$meta</span></span>"</span><span class="token punctuation">,</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642890#m1642890 TS 2015-06-12T16:40:36Z 2015-06-12T16:40:36Z Kurzfassung <p>Hallo,</p> <p>wennm man erst weiß, wo es kneift, dann findet man die Lösung überall im Internet, auch in den UCN von PHP:<br> <a href="http://php.net/manual/de/domdocument.loadhtml.php" rel="noopener noreferrer">http://php.net/manual/de/domdocument.loadhtml.php -> bigtree </a></p> <p>Es ist mir nie aufgefallen, dass die Meta-Angabe</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">http-equiv</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>content-type<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/html; charset=utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>für die DOMDocument-Klasse zum Verarbeiten von HTML in anderen Kodierungen, als ISO-8859-1 notwendig ist, weil ich die in meinen Testdokumenten drinstehen habe oder die untersuchten Fremdseiten immer in ISO-8859-1 waren.</p> <p>Und um Gunnar gleich vorzugreifen: Das folgende reicht der DOMDocument-Klasse leider nicht.<br> Ein sauber aufgebautes HTML-5-Dokument wird also nur mit der antiquierten Meta-Angabe sauber geparst. Es ist und bleibt eben PHP (plastered home production) :-P</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642931#m1642931 TS 2015-06-13T09:25:52Z 2015-06-13T09:25:52Z Kurzfassung <p>Hallo,</p> <p>ich will das noch mal etwas verbiegen. Inwzwischen wisse wir, dass:</p> <blockquote> <p>wennm man erst weiß, wo es kneift, dann findet man die Lösung überall im Internet, auch in den UCN von PHP:<br> <a href="http://php.net/manual/de/domdocument.loadhtml.php" rel="noopener noreferrer">http://php.net/manual/de/domdocument.loadhtml.php -> bigtree </a></p> <p>Es ist mir nie aufgefallen, dass die Meta-Angabe</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">http-equiv</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>content-type<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/html; charset=utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>für die DOMDocument-Klasse zum Verarbeiten von HTML in anderen Kodierungen, als ISO-8859-1 notwendig ist, weil ich die in meinen Testdokumenten drinstehen habe oder die untersuchten Fremdseiten immer in ISO-8859-1 waren.</p> <p>Und um Gunnar gleich vorzugreifen: Das folgende reicht der DOMDocument-Klasse leider nicht.<br> Ein sauber aufgebautes HTML-5-Dokument wird also nur mit der antiquierten Meta-Angabe sauber geparst. Es ist und bleibt eben PHP (plastered home production) :-P</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>utf-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>aber eine Angabe von</p> <pre><code class="block language-html"><span class="token prolog"><?xml encoding="UTF-8" ?></span> </code></pre> <p>die man dem Dokument voranstellt (bisher gilt: wirklich als erste Zeile!), die DomDocument-Classes dazu bewegen, dass ihr HTML-Parser in der Kodierung UTF-8 arbeitet.</p> <p>Wenn man dies mittels PHP angeben will, sollte man sicherheitshalber die folgende Kostruktion wählen:</p> <pre><code class="block language-php"><span class="token comment">## [...]</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<'</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'?xml encoding="UTF-8" ?'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">">\r\n"</span><span class="token punctuation">;</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>wegen der eventuell eingeschalteten Short-Open-Tags. Aber auch bei ausgeschalteten Short-Open-Tags kotzen manche PHP Verionen noch ab, wenn eine derarige Zeile "<?xml ... ?>" auskommentiert im Dokument steht. Das "?>" scheint da trotzdem zu stören.</p> <p>Grüße<br> TS</p> <blockquote></blockquote> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642897#m1642897 dedlfix 2015-06-12T17:35:32Z 2015-06-12T17:35:32Z meta-charset - Angabe war nicht innerhalb der ersten 1024 Bytes <p>Tach!</p> <blockquote> <p>Mich beruhigt aber, dass alle Mitposter genauso gerätselt haben...</p> </blockquote> <p>Es gab ja auch lange kein direkt nachvollziehbares Beispiel des Problems.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642898#m1642898 TS 2015-06-12T17:40:56Z 2015-06-12T17:40:56Z Fakten, Fakten, Fakten <p>Re-Tach :-)</p> <blockquote> <blockquote> <p>Mich beruhigt aber, dass alle Mitposter genauso gerätselt haben...</p> </blockquote> <p>Es gab ja auch lange kein direkt nachvollziehbares Beispiel des Problems.</p> </blockquote> <p>Naja, sooo lange hat das nicht gedauert, bis die Fakten auf den Tisch kamen. Im siebten Link von oben kam die URL mit dem Musterscript.</p> <p>Aber diese DOMDocument-Klasse ist mir auch immer noch suspekt, obwohl (mit den passenden Tricks) bisher alles klappt. Die muss man aber erst einmal kennen. Wird Zeit, sie alle aufzuschreiben.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642919#m1642919 dedlfix 2015-06-13T05:59:42Z 2015-06-13T05:59:42Z Weiterführende Gedanken zur gefundenen Lösung <p>Tach!</p> <blockquote> <p>DOMDocument hat eine Macke, die man per Schmuddellösung umschiffen kann:<br> Bereits beim Laden des Dokumentes muss die passende Kodierung genau mit diesem <meta>-Tag (dem antiquierten aus HTML4.1) als erster Tag dieser Art angebeben werden. Das geht schmuddelig, in dem man ihn einfach "deplaced" vor das Dokument schaltet.</p> </blockquote> <p>Was hast du denn dagegen, einen XML-Vorspann zu nehmen? Den kann man völlig unkompliziert und undeplatziert an den Anfang des Dokuments packen.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642921#m1642921 TS 2015-06-13T06:17:58Z 2015-06-13T06:17:58Z Weiterführende Gedanken zur gefundenen Lösung <p>Guten Morgen Dedlfix,</p> <blockquote> <blockquote> <p>DOMDocument hat eine Macke, die man per Schmuddellösung umschiffen kann:<br> Bereits beim Laden des Dokumentes muss die passende Kodierung genau mit diesem <meta>-Tag (dem antiquierten aus HTML4.1) als erster Tag dieser Art angebeben werden. Das geht schmuddelig, in dem man ihn einfach "deplaced" vor das Dokument schaltet.</p> </blockquote> <p>Was hast du denn dagegen, einen XML-Vorspann zu nehmen? Den kann man völlig unkompliziert und undeplatziert an den Anfang des Dokuments packen.</p> </blockquote> <p>Hast Du das auch ausprobiert damit? Wie müsste der denn dMn aussehen? Das SR-Dokument hat diesen davor:</p> <pre><code class="block language-html"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span> </code></pre> <p>Und damit ist die DOMDocument-Class nicht zufrieden.</p> <p>Wenn der anders aussehen muss oder darf, gib mir doch bitte mal ein Muster, dann probiere ich das nochmal aus. Ich bin aber relativ sicher, dass es nur mit dem Antik-Meta-Header aus HTML 4.01 funktioniert.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642922#m1642922 dedlfix 2015-06-13T06:36:17Z 2015-06-13T06:36:17Z Weiterführende Gedanken zur gefundenen Lösung <p>Tach!</p> <blockquote> <blockquote> <p>Was hast du denn dagegen, einen XML-Vorspann zu nehmen? Den kann man völlig unkompliziert und undeplatziert an den Anfang des Dokuments packen.</p> </blockquote> <p>Hast Du das auch ausprobiert damit?</p> </blockquote> <p><a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642879#m1642879" rel="noopener noreferrer">Ja</a>.</p> <blockquote> <p>Wie müsste der denn dMn aussehen?<br> Das SR-Dokument hat diesen davor:</p> <pre><code class="block language-html"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span> </code></pre> </blockquote> <p>Genau so. Die Versionsangabe kann man aber auch weglassen, encoding muss bleiben.</p> <blockquote> <p>Und damit ist die DOMDocument-Class nicht zufrieden.</p> </blockquote> <p>Der SR hat ja auch noch einen Kommentar davor. Damit wird anscheinend ein nachfolgender XML-Vorspann ignoriert.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642924#m1642924 TS 2015-06-13T07:01:38Z 2015-06-13T08:18:19Z Weiterführende Gedanken zur gefundenen Lösung <p>Nochmal Tach :-)</p> <blockquote> <blockquote> <blockquote> <p>Was hast du denn dagegen, einen XML-Vorspann zu nehmen? Den kann man völlig unkompliziert und undeplatziert an den Anfang des Dokuments packen.</p> </blockquote> <p>Hast Du das auch ausprobiert damit?</p> </blockquote> <p><a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642879#m1642879" rel="noopener noreferrer">Ja</a>.</p> </blockquote> <p>Hab ich übersehen. Da war ich wohl gerade damit beschäftigt, die anderen Lösungsideen durchzuprobieren. Siehste: hättest Du das Betreff geändert, wäre das nicht passiert ;-)</p> <blockquote> <blockquote> <p>Wie müsste der denn dMn aussehen?<br> Das SR-Dokument hat diesen davor:</p> <pre><code class="block language-html"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span> </code></pre> </blockquote> <p>Genau so. Die Versionsangabe kann man aber auch weglassen, encoding muss bleiben.</p> <blockquote> <p>Und damit ist die DOMDocument-Class nicht zufrieden.</p> </blockquote> <p>Der SR hat ja auch noch einen Kommentar davor. Damit wird anscheinend ein nachfolgender XML-Vorspann ignoriert.</p> </blockquote> <p>Ja, sieht so aus. Ich habe die Versionen nochmal durchprobiert.</p> <p>Das Voranstellen von</p> <pre><code class="block language-html"> <span class="token prolog"><?xml encoding="UTF-8"?></span> </code></pre> <p>hat den Vorteil, dass das auch keinen Parserfehler im DOMDocument verursacht, auch dann nicht, wenn die Angabe später nochmal erfolgt. Damit erübrigt sich ja das Reinstanzen einer Angabe direkt hinter dem <head>.</p> <p><strong>Kommt sofort in meine Sammlung.</strong></p> <p>Abschließende Frage dazu:<br> Wie sieht es mit der XML-Konformität des Dokumentes aus? Wenn man sich irgendwo ein (HTML 5-)Dokument beschafft, feststellt dass es vermeintlich UTF-8-codiert ist, darf man doch nicht einfach einen XML-Tag voranstellen, oder? Da steige ich nun noch nicht so ganz durch.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642926#m1642926 dedlfix 2015-06-13T07:37:14Z 2015-06-13T07:37:14Z Weiterführende Gedanken zur gefundenen Lösung <p>Tach!</p> <blockquote> <p>Hab ich übersehen. Da war ich wohl gerade damit beschäftigt, die anderen Lösungsideen durchzuprobieren. Siehste: hättest Du das Betreff geändert, wäre das nicht passiert ;-)</p> </blockquote> <p>Du könntest dich registrieren. Dazu werden keinerlei persönliche Daten benötigt, nur eine Email-Adresse. Der Vorteil ist aber, dass du die Übersicht behältst, weil dann serverseitig die gelesenen Postings gekennzeichnet werden können. Damit entgeht dir nichts mehr.</p> <blockquote> <p>Abschließende Frage dazu:<br> Wie sieht es mit der XML-Konformität des Dokumentes aus? Wenn man sich irgendwo ein (HTML 5-)Dokument beschafft, feststellt dass es vermeintlich UTF-8-codiert ist, darf man doch nicht einfach einen XML-Tag voranstellen, oder? Da steige ich nun noch nicht so ganz durch.</p> </blockquote> <p>Die XML-Konformität ist nicht relevant, wenn du den HTML-Parser nimmst. Der ist ausreichend fehlertolerant.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642929#m1642929 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-13T08:35:57Z 2015-06-13T08:35:57Z Weiterführende Gedanken zur gefundenen Lösung <p>Hallo, Vielen Dank für Eure Mühe. Ihr seid hoffentlich nicht böse, dass ich als Laie den Überblick verliere. Ich werde jetzt mal die Lösung unter "Kurzfassung" ausprobieren, auch wenn ich sie noch nicht verstehe. Ich hatte auch im Quelletext von sr-online gesehen, dass die HTML - Seite als XML definiert wird und mich gewundert. Nach meiner Einschätzung hat der sr anscheinend nicht nur kein Geld für einen ordentlichen rss-feed, sondern auch keines für eine ordentlich homepage.</p> <p>Wie gesagt, Danke, mal gucken ob ich die "Kurzfassung" einbauen kann, so wie ich es brauche.</p> <p>Glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642930#m1642930 TS-ohne 2015-06-13T09:08:50Z 2015-06-13T09:08:50Z Weiterführende Gedanken zur gefundenen Lösung <p>Hallo zurück,</p> <blockquote> <p>Hallo, Vielen Dank für Eure Mühe. Ihr seid hoffentlich nicht böse, dass ich als Laie den Überblick verliere.</p> </blockquote> <p>Das geht auch leicht bei dieser Klasse und den Rahmenbedingungen :-)</p> <blockquote> <p>Ich werde jetzt mal die Lösung unter "Kurzfassung" ausprobieren, auch wenn ich sie noch nicht verstehe. Ich hatte auch im Quelletext von sr-online gesehen, dass die HTML - Seite als XML definiert wird und mich gewundert. Nach meiner Einschätzung hat der sr anscheinend nicht nur kein Geld für einen ordentlichen rss-feed, sondern auch keines für eine ordentlich homepage.</p> </blockquote> <p>Da wäre ich jetzt nicht so streng.<br> Eine absolute Wahrheit gibt es wohl nicht in der Webentwicklung, weil die Vorgaben von den diversen Browsern immer noch nicht eingehalten werden und die Anbieter daher oft "gewachsene Lösungen" haben, die zumindest einigermaßen funktionieren.</p> <blockquote> <p>Wie gesagt, Danke, mal gucken ob ich die "Kurzfassung" einbauen kann, so wie ich es brauche.</p> </blockquote> <p>Das ist noch nicht das Non-Plus-Ultra gewesen. Dedlfix hat die Angabe dür die Kodierung noch besser gelöst:</p> <pre><code class="block language-php"><span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<'</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'?xml encoding="utf-8" ?'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">">\r\n"</span><span class="token punctuation">;</span> <span class="token comment">## *1)</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Dieses merkwürdige Zusammenstoppeln für den xml-Tag habe ich gemacht, weil der PHP-Parser sonst kotzen könnte, wenn Short-Open-Tags eingeschaltet sind. Leider auch, wenn sie ausgeschaltet sind und man eine Zeile mit "?>" auskommeniert...</p> <p>Ich mach Dir einen anderen Vorschlag: Da ich an einer ähnlichen Sache sitze und mich sowieso durchkämpfen muss, beschreibe doch einfach möglichst genau, was Du benötigst. Ich versuche dann mal, das möglichst sauber umzusetzen und hoffe, dass mir Dedlfix dabei auf die Finger guckt. Ich schreibe dann auch veiel Kommenrtare dazu und würde mich freuen, wenn jemands diesen doch mMn typischen Anwendungsfall für's WIKI aufbereiten würde.</p> <p>Ich ahbe hier in den letzten Tagen schon drei bis vier wesentliche Kniffe für die DOMDocument-Classes dazugelernt und würde die gerne dokumentieren, bevor sie wiedre in Vergessenheit geraten.</p> <p>Habe mich gerade auch hier angemeldet, aber das funktioniert noch nicht so ganz. Da ist wohl wieder der Browser dran Schuld, der immer erstmal alle Cookies ablehnt.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642932#m1642932 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-13T09:32:19Z 2015-06-13T09:33:15Z Weiterführende Gedanken zur gefundenen Lösung <p>@TS-ohne</p> <p>das ist aber ein sehr nettes Angebot. Wie gesagt, ich habe ja auf meiner Seite ansonsten rss-feeds geparst ohne große Probleme. Nur NDR und sr-online lese ich mit Xpath aus, habe mir das zusammengeschustert in Absprache mit sr-online. Das sieht dann wenig elegant so aus, dass ich alle Seiten durchlese (ich führe jetzt hier mal nicht alle einzelnen Seiten auf), die descriptions für meine tooltipps erstmal hole und in ein array packe und am Ende die titles und links verknüpfe und die description in einen tooltipp packe (siehe meine Seite<a href="http://nachrichtentisch.de" rel="nofollow noopener noreferrer">Linkbeschreibung</a>. Hier der Code:</p> <pre><code class="block"><?php $data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'); $doc = new DOMDocument(); $doc->loadHTML($data); $zaehler = 0; $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = utf8_decode($node2->nodeValue); $zaehler++; } } $data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html'); $doc = new DOMDocument('1.0', 'utf-8'); $doc->loadHTML($data); $xPath = new DOMXPath($doc); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = utf8_decode($node2->nodeValue); $zaehler++; } } </code></pre> <p>......usw auch die anderen (insgesamt 7) Seiten und dann:</p> <pre><code class="block">$data = file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'); $doc = new DOMDocument('1.0', 'utf-8'); $doc->loadHTML($data); $xPath = new DOMXPath($doc); $zaehler = 0; foreach ($xPath->query("//div[@class=\"mitte_folgeseiten\"]/ul/li/a") as $element) { if ($zaehler <= 7) { $hreft = $element->getAttribute("href"); $title = $element->nodeValue; $href = "http://www.sr-online.de".$hreft; $href = utf8_decode($href); $title = utf8_decode($title); ?> <li><a href=' <?php echo htmlspecialchars ($href); ?> ' target='_blank' class="ketchup tooltip" title=" <?php echo htmlspecialchars ($array[$zaehler], ENT_QUOTES); ?> "> <?php echo htmlspecialchars ($title); ?> </a></li> <?php $zaehler++; } } ?> </code></pre> <p>Nochmals dank für Deine Mühe. Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642934#m1642934 dedlfix 2015-06-13T10:19:16Z 2015-06-13T10:19:16Z Kurzfassung <p>Tach!</p> <blockquote> <pre><code class="block language-php"><span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<'</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'?xml encoding="UTF-8" ?'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">">\r\n"</span><span class="token punctuation">;</span> </code></pre> <p>wegen der eventuell eingeschalteten Short-Open-Tags. Aber auch bei ausgeschalteten Short-Open-Tags kotzen manche PHP Verionen noch ab, wenn eine derarige Zeile "<?xml ... ?>" auskommentiert im Dokument steht. Das "?>" scheint da trotzdem zu stören.</p> </blockquote> <p>Das <? innerhalb eines String-Literals macht keine Probleme. Das muss nicht auseinandergenommen werden. Das ?> ist ebenfalls innerhalb eines Strings problemfrei. Allerdings verliert das String-Literal und alle andere Syntax beim Auskommentieren seine Bedeutung. Ein einzeiliger Kommentar (// oder #) endet nicht nur am Zeilenende, sondern auch an einem ?> in der Zeile. Ein mehrzeiliger (/* */) allerdings lässt sich nicht durch ein ?> aus der Ruhe bringen. Das ?> ist also nur für den Fall erforderlich, dass man die Zeile einzeilig auskommentieren möchte. Für den normalen Betrieb kann man alles beides einfach so zusammenschreiben.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642933#m1642933 TS ts-self@online.de 2015-06-13T10:13:35Z 2015-06-13T10:13:35Z SR-Nachrichten Excerpt <blockquote> <p>@TS ist OK, jetzt funktionierts ;-))</p> </blockquote> <p>Rehallo,</p> <blockquote> <p>das ist aber ein sehr nettes Angebot.</p> </blockquote> <p>Deinen Quellcode wollte ich allerdings nicht gerne reverse engineeren ;-O</p> <p>Ich fasse mal zusammen, was ich verstanden habe:</p> <p><img src="/images/7500221d-8d18-4f2a-b4a3-d33502798753.jpg" alt="Alternativ-Text" loading="lazy"></p> <p>Du möchtest den markierten Bereich auswerten?<br> Davon benötigst Du die Original-Links und dann eine Funktion, die jeweils den Teaser nebst Überschriften für jeden Link beschafft?</p> <p>Wie machst Du das bisher?</p> <p>Bitte korrigiere mich. Und bitte lieber mit Bild und Klartext-Beschreibung, als mit Code-Idee. Code besprechen wir dann erst anschließend. Und wenn Du schon mal fragen könntest bei SR, ob die mit einer Nennung nebst Screenshot in einem Beispiel im SelfHTML-Wiki und für Unterrichtszwecke einverstanden sind, wäre das gleich doppelt interessant.</p> <p>Was brauchst Du noch? Bitte auch lieber mit Bild und Trivalbeschreibung, als mit Code-Ideen.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642938#m1642938 glupto info@nachrichtentisch.de http://nachrichtentisch.de 2015-06-13T11:08:53Z 2015-06-13T11:18:16Z SR-Nachrichten Excerpt <p>Eigentlich hast Du schon alles genannt, ich brauche den Inhalt von title, description und href, also Schlagzeile, Teasertext (entspricht hier dem kompletten Meldungstext) und Link. Das ist alles leider nicht auf einer Seite untergebracht, sondern auf Unterseiten, die deshalb einzeln geparst werden müssen. Am Ende soll alles so aussehen wie auf meiner jetzigen Seite, bloß ohne Fehler:</p> <p><img src="/images/c4e9de77-6096-4c58-bc15-ea1ae5715ccc.jpg" alt="Alternativ-Text" loading="lazy"></p> <p>Der Teaser-Text landet in einem tooltipp, der bei mouseover erscheint. Aber eigentlich brauche ich nur den Inhalt der Felder in verlässlicher Zeichendarstellung. Jetzt gehe ich auf jede Seite und parse mithilfe von Xpath den Meldungstext, indem ich nach <code> ($xPath->query('//div/p') as $node2) {</code> suche, dann packe ich den Text in ein array, dann gehe ich auf die erste Seite und hole mir dort ebenfalls mit xpath</p> <pre><code class="block"> ($xPath->query("//div[@class=\"mitte_folgeseiten\"]/ul/li/a") as $element) </code></pre> <p>die Schlagzeilen und mit</p> <pre><code class="block"> $hreft = $element->getAttribute("href"); $title = $element->nodeValue; </code></pre> <p>Links und Titel. Dann gebe ich es als Liste aus - wie auf dem Bild zu sehen. So, ein wenig Code musste sein, sonst hätte ich es nicht anders erklären können.</p> <p>Schönen Gruß glupto p.S.das Zeichenproblem ist in der vorletzten Schlagzeile ja mal wieder prima zu sehen.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642935#m1642935 TS 2015-06-13T10:28:34Z 2015-06-13T10:28:51Z Kurzfassung <blockquote> <p>Tach!</p> <blockquote> <pre><code class="block language-php"><span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<'</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'?xml encoding="UTF-8" ?'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">">\r\n"</span><span class="token punctuation">;</span> </code></pre> <p>wegen der eventuell eingeschalteten Short-Open-Tags. Aber auch bei ausgeschalteten Short-Open-Tags kotzen manche PHP Verionen noch ab, wenn eine derarige Zeile "<?xml ... ?>" auskommentiert im Dokument steht. Das "?>" scheint da trotzdem zu stören.</p> </blockquote> <p>Das <? innerhalb eines String-Literals macht keine Probleme. Das muss nicht auseinandergenommen werden. Das ?> ist ebenfalls innerhalb eines Strings problemfrei. Allerdings verliert das String-Literal und alle andere Syntax beim Auskommentieren seine Bedeutung. Ein einzeiliger Kommentar (// oder #) endet nicht nur am Zeilenende, sondern auch an einem ?> in der Zeile. Ein mehrzeiliger (/* */) allerdings lässt sich nicht durch ein ?> aus der Ruhe bringen. Das ?> ist also nur für den Fall erforderlich, dass man die Zeile einzeilig auskommentieren möchte. Für den normalen Betrieb kann man alles beides einfach so zusammenschreiben.</p> </blockquote> <p>Danke für die Erleuchtung.</p> <p>Ich hatte mir angewöhnt, das "?>" immer (<em>ähem</em>) auseinanderzunehmen. Eben hatte ich nicht getan im Bastelscript und bin sofort damit auf die Schnauze gefallen.</p> <p>Man bricht sich keinen ab, wenn man es sicherheitshalber immer auseinander nimmt.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642939#m1642939 TS 2015-06-13T11:48:25Z 2015-06-13T11:50:38Z SR-Nachrichten Excerpt <p>Hallo,</p> <blockquote> <p>Eigentlich hast Du schon alles genannt, ich brauche:</p> </blockquote> <blockquote> <ul> <li>den Inhalt von title,</li> <li>description</li> <li>href,</li> </ul> </blockquote> <blockquote> <p>also Schlagzeile, Teasertext (entspricht hier dem kompletten Meldungstext) und Link. Das ist alles leider nicht auf einer Seite untergebracht, sondern auf Unterseiten, die deshalb einzeln geparst werden müssen. Am Ende soll alles so aussehen wie auf meiner jetzigen Seite, bloß ohne Fehler:</p> <p><img src="/images/c4e9de77-6096-4c58-bc15-ea1ae5715ccc.jpg" alt="Alternativ-Text" loading="lazy"></p> <p>Der Teaser-Text landet in einem tooltipp, der bei mouseover erscheint. Aber eigentlich brauche ich nur den Inhalt der Felder in verlässlicher Zeichendarstellung. Jetzt gehe ich auf jede Seite und parse mithilfe von Xpath den Meldungstext, [...]</p> </blockquote> <p>Das habe ich mir soweit angeschaut und daraus meine Schlüsse gezogen.</p> <p>SR-Online ist so freundlich, alle notwenigen Elemente (bitt kontrollieren) im Container</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>mitte_text<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>zusammenzufassen. Den habe ich mir einfach rausgeholt aus der Seite und z.B. mal eben die Links darin umgeschrieben auf absolute (http://sr-online.de/ [...]) Adressierung. Das geht mit DOMDocument alles recht einfach, wenn man erst einmal die Hürden überwunden hat.</p> <p><img src="/images/d38d63f9-424e-447e-b699-ce7eccc7a87f.jpg" alt="Alternativ-Text" loading="lazy"></p> <p>Die nächste Überlegung sollte also sein, ob in dem gegrabbten Container (s.o.) alles enthalten ist, was du benötigst -> Quellcode:</p> <pre><code class="block language-html"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">HTML</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>de<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>SR-Online<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>mitte_text<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>Hörfunknachrichten, 13.06.2015 12:10 Uhr<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span> <span class="token comment"><!--13.06.2015 1200--></span>Berlin: Gutachter widersprechen Regierungsabsicht<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>Für den NSA-Untersuchungsausschuss steigen die Chancen, doch noch Einsicht in die sogenannte Selektorenliste des US-Geheimdienstes zu erhalten. Nach Einschätzung des Wissenschaftlichen Dienstes des Bundestages ist es nicht zulässig, die Akten einem Sonderermittler vorzulegen und gleichzeitig dem Ausschuss die Einsicht zu verweigern. Ein Ermittlungsbeauftragter sei nur Hilfsperson und dürfe nicht mehr Rechte haben als der Ausschuss. Die Selektorenliste könnte Aufschluss darüber geben, wen die NSA mit Hilfe des BND ausgeforscht hat. <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>hr</span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">height</span><span class="token punctuation">:</span>2px<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>mitte_folgeseiten<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1200--></span>Brüssel: Griechenland geht optimistisch in weitere Verhandlungen<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_archiv_thispage.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1200--></span>Berlin: Gutachter widersprechen Regierungsabsicht<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-3.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1201--></span>Essen: Gläubiger dürfen sich bei Middelhoff bedienen<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-4.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1202--></span>Washington: Schwere Abstimmungsniederlage für Obama<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-5.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1202--></span>Saarbrücken: Neue ICE-Generation nach Paris<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-6.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1203--></span>Luxemburg : Festakt zu 30 Jahre Schengener Abkommen <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-7.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1203--></span>Luxemburg : Kulturzentrum „rotondes" wird eröffnet <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/images/element_mitte_link_intern.gif<span class="token punctuation">"</span></span> <span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>9<span class="token punctuation">"</span></span> <span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>22<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Link<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>http://sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-8.html<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token comment"><!--13.06.2015 1204--></span>: Das Wetter: Wechselhaft bis 26 Grad<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token comment"><!-- Falls Personendokument, dann als Moderator(en) ausgeben --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>autor<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>(Saarländischer Rundfunk)<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">clear</span><span class="token punctuation">:</span>both<span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Die Dokumentstruktur drum herum stammt von mir. Geholt habe ich nur das DIV und habe die Links (href=) und die Images (src=) automatisch umgeschrieben, da die bei SR-Online nur absolut zur DOMAIN angebeben werden (mMn auch sinnvoll).</p> <p>Du kannst also nun entscheiden, wie Du vorgehen willst:</p> <ul> <li>Du erhältst ein Array mit Klartextangaben, die Du dann fürs neue HTML verarbeiten musst</li> <li>Du erhältst fertige HTML-Nodes, die Du mittels DOMDocument in dein neues Dokument einfügen kannst.</li> </ul> <p>Mangels Erfahrungen damit würde ich das nicht als Klasse bauen. Ich würde mich aber freuen, wenn das jemand umbauen könnte nachher, wenn alles funktioniert. Ich will schließlich auch noch 'was lernen :-)</p> <p>Grüße<br> TS</p> <p>PS:<br> nebenbei kümmere ich mich um meine abgestürzte Terabyte-Platte. Immer, wenn die arbeitet, gucke ich hier... Drück mir die Daumen, dass ich die Daten alle retten kann :-)</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642946#m1642946 glupto 2015-06-13T14:47:50Z 2015-06-13T14:47:50Z SR-Nachrichten Excerpt <p>Und wie hast Du das gemacht? Auch mit Xpath? Den Inhalt des Mitte-Containers hatte ich mir auch geholt, also title und href und dann sr-online.de davorgepackt. Aber wie kriegst Du denn nun das Ganze ohne utf8-Probleme da heraus....? Also, wenn alles in einem array ist, ist ja gut...</p> <p>Ich drücke natürlich die Daumen für die Festplatte.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642949#m1642949 TS 2015-06-13T15:18:35Z 2015-06-13T15:18:35Z SR-Nachrichten Excerpt <blockquote> <p>Und wie hast Du das gemacht? Auch mit Xpath? Den Inhalt des Mitte-Containers hatte ich mir auch geholt, also title und href und dann sr-online.de davorgepackt. Aber wie kriegst Du denn nun das Ganze ohne utf8-Probleme da heraus....? Also, wenn alles in einem array ist, ist ja gut...</p> </blockquote> <p>Erst einmal zum Verfahren: Der Zugriff erfolgt immer über die Nodes. Wenn man so einen elegantgen Aufsetzpunkt hat, wie hier bei SR-Online, dann kann man von aus aufwärts und abwärts im Baum navigieren.</p> <p>nur kurz der erste Ansatz für den Ausschnitt, den ich schon gepostet hatte.</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#------------------------------------------------------------------------------</span> <span class="token keyword">function</span> <span class="token function-definition function">handleError</span><span class="token punctuation">(</span><span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token variable">$errline</span><span class="token punctuation">,</span> <span class="token keyword type-hint">array</span> <span class="token variable">$errcontext</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">global</span> <span class="token variable">$_errors</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'errno'</span> <span class="token operator">=></span> <span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errstr'</span> <span class="token operator">=></span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errfile'</span> <span class="token operator">=></span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errline'</span> <span class="token operator">=></span> <span class="token variable">$errline</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># , 'context' => $errcontext); </span> <span class="token punctuation">}</span> <span class="token comment">#------------------------------------------------------------------------------</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html'</span><span class="token punctuation">;</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<?xml encoding="UTF-8" ?'</span><span class="token operator">.</span><span class="token string single-quoted-string">'>'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token comment">## Das reicht der DOMDocument-Class jetzt aber!</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token comment"># $dom->strictErrorChecking = false ;</span> <span class="token comment"># $dom->substituteEntities = true; ## Darf man nicht machen, wenn das Doc nacher wieder </span> <span class="token comment">## komplett im HTML-Kontext ausgegeben werden soll</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token comment"># $dom->resolveExternals = true;</span> <span class="token function">set_error_handler</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'handleError'</span><span class="token punctuation">,</span> <span class="token constant">E_WARNING</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">restore_error_handler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## hier wird der Hauptcontainer referenziert</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## hier werden die Links _im_ Container in einer dynamischen Liste referenziert</span> <span class="token variable">$linklist</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## Liste der Links durcharbeiten</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$linklist</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$linklist</span> <span class="token keyword">as</span> <span class="token variable">$link</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">## falls Attribute vorhanden sind</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$link</span><span class="token operator">-></span><span class="token function">hasAttributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$link</span><span class="token operator">-></span><span class="token property">attributes</span> <span class="token keyword">as</span> <span class="token variable">$attribute</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">name</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'href'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">value</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://sr-online.de'</span> <span class="token operator">.</span> <span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">value</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">## Images im Container in einer dynamischen Liste referenzieren</span> <span class="token variable">$imglist</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'img'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$imglist</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$imglist</span> <span class="token keyword">as</span> <span class="token variable">$img</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$img</span><span class="token operator">-></span><span class="token function">hasAttributes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$img</span><span class="token operator">-></span><span class="token property">attributes</span> <span class="token keyword">as</span> <span class="token variable">$attribute</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">name</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'src'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">value</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://sr-online.de'</span> <span class="token operator">.</span> <span class="token variable">$attribute</span><span class="token operator">-></span><span class="token property">value</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$text</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">saveHTML</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">HTML</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>de<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>SR-Online<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$text</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642953#m1642953 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-13T16:13:23Z 2015-06-13T16:13:23Z SR-Nachrichten Excerpt <p>Danke, dann werde ich mal versuchen, das in mein Schema zu bekommen. Denn ich möchte ja nicht sr-online als html nachbauen, sondern brauche nachher z.B. keine images usw. sondern nur die drei arrays mit title, link und description, die ich entsprechend mit meinem css usw. als Bestandteil meiner Seite ausgeben will (desc als tooltipp usw).</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642984#m1642984 Jörg Reinholz http://www.fastix.org 2015-06-14T10:17:47Z 2015-06-14T10:17:47Z Völlig offtopic, Frage an TS <p>Moin!</p> <p>Privat kann man Die keine Nachricht senden, deshalb so:</p> <p>Ich weiss auch, das Drängeln unhöflich ist, ich bin ganz scharf darauf, <a href="http://forum.selfhtml.org/meta/2015/jun/13/wiki-php-strich-anwendung-und-praxis-strich-loginsystem/1642967#m1642967" rel="noopener noreferrer">dass dieses jemand mit XAMPP probiert</a>.</p> <p>Jörg Reinholz</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643123#m1643123 Auge 2015-06-15T08:57:47Z 2015-06-15T08:57:47Z SR-Nachrichten Excerpt <p>Hallo</p> <blockquote> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Was mich bei deinen Beispielen kirre gemacht hat, ist die obige Zeile. Die wirkt, als hättest du sie falsch markiert aus einem HTML-Dokument entliehen. Die hier passt (Korrekturen: Anführungszeichen, Doppelpunkt vs. Gleichheitszeichen).</p> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset: UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642954#m1642954 Gunnar Bittersmann selfhtml@bittersmann.de http://bittersmann.de 2015-06-13T16:30:47Z 2015-06-13T16:30:47Z SR-Nachrichten Excerpt <p>@@glupto</p> <blockquote> <p>nur die drei arrays mit title, link und description, die ich entsprechend mit meinem css usw. als Bestandteil meiner Seite ausgeben will (desc als tooltipp usw).</p> </blockquote> <p>Dir ist bewusst, dass viele Nutzer (die meisten? auf jeden Fall Tendenz steigend) niemals in den „Genuss“ eines Tooltips kommen werden, weil sie gar keine Maus haben, um die Seite nach <em>mystery meat</em> zu durchsuchen?</p> <p>LLAP </p> <div class="signature">-- <br> „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer) </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642955#m1642955 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-13T16:35:26Z 2015-06-13T16:35:54Z SR-Nachrichten Excerpt <blockquote> <p>@@glupto</p> <blockquote> <p>nur die drei arrays mit title, link und description, die ich entsprechend mit meinem css usw. als Bestandteil meiner Seite ausgeben will (desc als tooltipp usw).</p> </blockquote> <p>Dir ist bewusst, dass viele Nutzer (die meisten? auf jeden Fall Tendenz steigend) niemals in den „Genuss“ eines Tooltips kommen werden, weil sie gar keine Maus haben, um die Seite nach <em>mystery meat</em> zu durchsuchen?</p> </blockquote> <p>ja, dafür habe ich eine Mobilversion, bei der beim ersten touch auf eine Schlagzeile der Teasertext kommt, in dem dann der link ("....mehr") steckt. Wer überhaupt keinen Teasertext sehen will, für den wird eine Variante ohne tooltipp angeboten. Ich möchte das alles noch personalisieren (welche Medien, wieviele Schlagzeilen, mit/ohne tooltipps), aber dazu muss ich mich erstmal mit cookies auskennen (vor einer DB-Lösung mit Userlogin schrecke ich noch mehr zurück).</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642983#m1642983 TS 2015-06-14T10:08:49Z 2015-06-14T10:08:49Z SR-Nachrichten Excerpt, Grabbellösung <p>Hi glupto,</p> <p>ich war Dir noch meine Version schuldig geblieben. Gestern habe ich es nicht mehr geschafft, musste draußen noch 'was erledigen. Die Sonne schien...</p> <p>Hier jedenfalls erst einmal ein funtkionierendes Gestrüpp:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#==============================================================================</span> <span class="token keyword">function</span> <span class="token function-definition function">handleError</span><span class="token punctuation">(</span><span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token variable">$errline</span><span class="token punctuation">,</span> <span class="token keyword type-hint">array</span> <span class="token variable">$errcontext</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">global</span> <span class="token variable">$_errors</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'errno'</span> <span class="token operator">=></span> <span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errstr'</span> <span class="token operator">=></span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errfile'</span> <span class="token operator">=></span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errline'</span> <span class="token operator">=></span> <span class="token variable">$errline</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># , 'context' => $errcontext); </span> <span class="token punctuation">}</span> <span class="token comment">#==============================================================================</span> <span class="token keyword">function</span> <span class="token function-definition function">get_links</span><span class="token punctuation">(</span><span class="token variable">$node</span> <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$node</span> <span class="token operator">===</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span> <span class="token variable">$_links</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$__linklist</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## Liste der Links durcharbeiten</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$__linklist</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$__linklist</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$__link</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">## falls Attribute vorhanden sind</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$__link</span><span class="token operator">-></span><span class="token function">hasAttribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$__link</span><span class="token operator">-></span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'linktext'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$__link</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$_links</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">#==============================================================================</span> <span class="token comment">## php main</span> <span class="token comment">#==============================================================================</span> <span class="token variable">$scheme</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://'</span><span class="token punctuation">;</span> <span class="token variable">$domain</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'www.sr-online.de'</span><span class="token punctuation">;</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token variable">$scheme</span> <span class="token operator">.</span> <span class="token variable">$domain</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'</span><span class="token punctuation">;</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<?xml encoding="UTF-8" ?'</span><span class="token operator">.</span><span class="token string single-quoted-string">'>'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token comment">## Das reicht der DOMDocument-Class jetzt aber!</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token function">set_error_handler</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'handleError'</span><span class="token punctuation">,</span> <span class="token constant">E_WARNING</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">restore_error_handler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## hier wird der Hauptcontainer referenziert</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_links</span> <span class="token operator">=</span> <span class="token function">get_links</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$_links</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$link</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$container</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$scheme</span><span class="token operator">.</span><span class="token variable">$domain</span><span class="token operator">.</span><span class="token variable">$link</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">set_error_handler</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'handleError'</span><span class="token punctuation">,</span> <span class="token constant">E_WARNING</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$container</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">restore_error_handler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## XPath für die Node feststellen</span> <span class="token variable">$nodexpath</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getNodePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$xpath</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMXpath</span><span class="token punctuation">(</span><span class="token variable">$dom</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/h1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'heading_1'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token comment">## SR benutzt leid3r manchmal H1 und manchmal H2 an dieser Stelle</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/div[1]/h1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'heading_2'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/div[1]/h2'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'heading_2'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/div[2]/p'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'teaser'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">################################################################################################### </span> <span class="token comment">## HTML Out</span> <span class="token comment">################################################################################################### </span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$meta</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">HTML</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>de<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>SR-Online<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>pre</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$_links</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>pre</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643069#m1643069 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-14T17:36:08Z 2015-06-14T17:36:08Z SR-Nachrichten Excerpt, Grabbellösung <p>Danke nochmals für Deine Mühe. Ich habe mir das jetzt davon genommen und eingebaut, was ich brauchen konnte - und bisher keine missratenen Zeichen entdecken können!</p> <p>Also, Dank und Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643073#m1643073 glupto info@nachrichtentisch.de http://nachrichtentisch.de 2015-06-14T18:33:37Z 2015-06-14T18:43:24Z SR-Nachrichten Excerpt, Grabbellösung <p>Entschuldige, wenn ich noch mal mit einem wahrscheinlich dummen Problem komme. Ich habe jetzt das sr-online-abholen in eine function gepackt um mir dann den Inhalte der description zurückgeben zu lassen. Offenbar mache ich etwas falsch oder habe was nicht kapiert beim "return".</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">function</span> <span class="token function-definition function">srholen</span> <span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$zaehler</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<?xml encoding="UTF-8" ?'</span><span class="token operator">.</span><span class="token string single-quoted-string">'>'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$xPath</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMXPath</span><span class="token punctuation">(</span><span class="token variable">$dom</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$xPath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'//div/p'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$node2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$zaehler</span> <span class="token operator"><=</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$rueckgabe</span> <span class="token operator">=</span> <span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$rueckgabe</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Wenn ich vor dem return den Inhalt von $rueckgabe ausgeben lasse, ist alles drin, nach dem Aufrufen der Funktion ist nichts drin.</p> <pre><code class="block">srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html',$zaehler); echo $rueckgabe; </code></pre> <p>Woran kann denn das liegen?</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642986#m1642986 Matthias Apsel 2015-06-14T10:45:23Z 2015-06-14T10:45:23Z Völlig offtopic, Frage an TS <p>Hallo Jörg Reinholz,</p> <blockquote> <p>Privat kann man Die keine Nachricht senden, deshalb so:</p> </blockquote> <p>Dieses Forum bietet die Möglichkeit, <a href="http://forum.selfhtml.org/mails" rel="noopener noreferrer">private Nachrichten</a> zu senden?!</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Signaturen sind bloed (Steel) und Markdown ist mächtig. </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642987#m1642987 TS 2015-06-14T10:48:41Z 2015-06-14T10:48:41Z Völlig offtopic, Frage an TS <p>Moin!</p> <blockquote> <p>Privat kann man Die keine Nachricht senden, deshalb so:</p> </blockquote> <p>Doch, an ts-self@online.de</p> <blockquote> <p>Ich weiss auch, das Drängeln unhöflich ist, ich bin ganz scharf darauf, <a href="http://forum.selfhtml.org/meta/2015/jun/13/wiki-php-strich-anwendung-und-praxis-strich-loginsystem/1642967#m1642967" rel="noopener noreferrer">dass dieses jemand mit XAMPP probiert</a>.</p> </blockquote> <p>Wenn ich nachher noch Zeit habe, spiele ich damit ;-)<br> Was speziell soll denn gestestet werden?</p> <p>Ich kämpfe derzeit noch mit meinem Linux und der kaputten Festplatte.</p> <p>Wie kann ich mit cp alle Dateien eines Verzeichnisses kopieren (auf die andere Platte), inclusive der versteckten, aber nur dann, wenn die Quelldatei neuer ist?</p> <p>Ich hab alles vergessen, glaub ich. Grafische Oberflächen und Hilfsprogramme machen dumm :-O</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1642992#m1642992 Jörg Reinholz http://www.fastix.org 2015-06-14T11:04:09Z 2015-06-14T11:06:46Z Völlig offtopic, Frage an TS <p>Moin!</p> <blockquote> <p>Wie kann ich mit cp alle Dateien eines Verzeichnisses kopieren (auf die andere Platte), inclusive der versteckten, aber nur dann, wenn die Quelldatei neuer ist?</p> </blockquote> <pre><code class="block">cd /tmp mkdir test cd test cp -au /home/ts ./ </code></pre> <ul> <li>-a archive</li> <li>-u nur neuere</li> <li>/home/ts - Verzeichnis mit Inhalt - legt aber Verzeichnis an</li> </ul> <p>Variante mit Trick:</p> <pre><code class="block">cp -u /home/ts/* /home/ts/.* /tmp/test/ </code></pre> <p>weitere, extrem vorteilhafte Variante:</p> <pre><code class="block">rsync quelle ziel </code></pre> <ul> <li>kennt viele Optionen, geht auch über das Netz (ssh)</li> </ul> <p>Jörg Reinholz</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643075#m1643075 TS ts-self@online.de 2015-06-14T18:43:48Z 2015-06-14T18:43:48Z SR-Nachrichten Excerpt, Grabbel- und Guck-Lösung <p>Hallo Leute,</p> <blockquote> <p>Danke nochmals für Deine Mühe. Ich habe mir das jetzt davon genommen und eingebaut, was ich brauchen konnte - und bisher keine missratenen Zeichen entdecken können!</p> </blockquote> <p>Ich mach da auch immer noch Gehübungen mit der DOMDocument-Klassensammlung. Alles ist mir noch nicht klar. Vorhin ist mir durch die Unstabilitäten der SR-Online-Seite noch eine Merkwürdigkeit mit der Auswertung der XPath-Queries untergekommen. Leider nutzen die nicht immer dieselben Überschriften. Mal H1 und mal H2. Und der Bereich "<div></div>" hinter der eigentlichen Teaser-Meldung ist auch nicht immer vorhanden. Und da blieb dann der Teaser leer, obwohl das Query dafür vorhanden war und augenscheinlich zum <em>vorhandenen</em> XPath passte. Hier deshalb nochmal eine Guck- und Nachdenklösung, die einfach per Copy & Paste eine sinnvolle Ausgabe ergeben sollte.</p> <p>Ich suche noch nach einer anderen Möglichkeit, aus einem eindeutigen XPath wieder eine $node zu machen. Aber das geht vermutlich nur über die Elementliste, die man per query() erhält.</p> <pre><code class="block language-php"> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">### utf-8 ###</span> <span class="token comment">## $dom->loadHTML verursacht immer Warnungen beim Parsen, wenn das Dokument </span> <span class="token comment">## Fehler enthält. Das habe ich leider nicht abgeschaltet bekommen. </span> <span class="token comment">## Damit die Warnungen nicht stumpf abgeschaltet werden müssen, sondern</span> <span class="token comment">## für die Nutzung zur Verfügung stehen, werden sie in $_errors gesammelt</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#==============================================================================</span> <span class="token keyword">function</span> <span class="token function-definition function">handleError</span><span class="token punctuation">(</span><span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token variable">$errline</span><span class="token punctuation">,</span> <span class="token keyword type-hint">array</span> <span class="token variable">$errcontext</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">global</span> <span class="token variable">$_errors</span><span class="token punctuation">;</span> <span class="token variable">$_errors</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'errno'</span> <span class="token operator">=></span> <span class="token variable">$errno</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errstr'</span> <span class="token operator">=></span> <span class="token variable">$errstr</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errfile'</span> <span class="token operator">=></span> <span class="token variable">$errfile</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'errline'</span> <span class="token operator">=></span> <span class="token variable">$errline</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># , 'context' => $errcontext); </span> <span class="token punctuation">}</span> <span class="token comment">#==============================================================================</span> <span class="token keyword">function</span> <span class="token function-definition function">get_links</span><span class="token punctuation">(</span><span class="token variable">$node</span> <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$node</span> <span class="token operator">===</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span> <span class="token variable">$_links</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$__linklist</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'a'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## Liste der Links durcharbeiten</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$__linklist</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$__linklist</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$__link</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">## falls Attribute vorhanden sind</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$__link</span><span class="token operator">-></span><span class="token function">hasAttribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$__link</span><span class="token operator">-></span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'linktext'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$__link</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$_links</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">#==============================================================================</span> <span class="token keyword">function</span> <span class="token function-definition function">get_nodepathes</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">,</span> <span class="token variable">$link</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$output</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"[<span class="token interpolation"><span class="token variable">$link</span></span>]: \r\n"</span><span class="token punctuation">;</span> <span class="token variable">$_elements</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getElementsByTagName</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$_elements</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$element</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$output</span> <span class="token operator">.=</span> <span class="token variable">$element</span><span class="token operator">-></span><span class="token function">getNodePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$output</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">#==============================================================================</span> <span class="token comment">## php main</span> <span class="token comment">#==============================================================================</span> <span class="token variable">$scheme</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'http://'</span><span class="token punctuation">;</span> <span class="token variable">$domain</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'www.sr-online.de'</span><span class="token punctuation">;</span> <span class="token variable">$url</span> <span class="token operator">=</span> <span class="token variable">$scheme</span> <span class="token operator">.</span> <span class="token variable">$domain</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html'</span><span class="token punctuation">;</span> <span class="token variable">$page</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<?xml encoding="UTF-8" ?'</span><span class="token operator">.</span><span class="token string single-quoted-string">'>'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token comment">## Das reicht der DOMDocument-Class jetzt aber!</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token comment"># $dom->substituteEntities = true;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token function">set_error_handler</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'handleError'</span><span class="token punctuation">,</span> <span class="token constant">E_WARNING</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$page</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">restore_error_handler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## hier wird der Hauptcontainer referenziert</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$_links</span> <span class="token operator">=</span> <span class="token function">get_links</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$output</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$_links</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$link</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$container</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$scheme</span><span class="token operator">.</span><span class="token variable">$domain</span><span class="token operator">.</span><span class="token variable">$link</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">set_error_handler</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'handleError'</span><span class="token punctuation">,</span> <span class="token constant">E_WARNING</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$container</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">restore_error_handler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$node</span> <span class="token operator">=</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mitte_text'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$nodexpath</span> <span class="token operator">=</span> <span class="token variable">$node</span><span class="token operator">-></span><span class="token function">getNodePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$output</span> <span class="token operator">.=</span> <span class="token function">get_nodepathes</span><span class="token punctuation">(</span><span class="token variable">$node</span><span class="token punctuation">,</span> <span class="token variable">$link</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$xpath</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMXpath</span><span class="token punctuation">(</span><span class="token variable">$dom</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/h1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'heading_1'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token comment">## SR benutzt leider manchmal H1 und manchmal H2 an dieser Stelle</span> <span class="token comment"># $elements = $xpath->query($nodexpath .'/div[1]/h1'); </span> <span class="token comment">## Der textContent von div[1]/h1 ist auch schon in div[1] enthalten</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/div[1]'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'heading_2'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token comment"># $elements = $xpath->query($nodexpath .'/div[1]/h2'); </span> <span class="token comment"># if ($elements->length > 0 ) $_links[$key]['heading_2'] = $elements->item(0)->textContent; </span> <span class="token comment"># $elements = $xpath->query($nodexpath .'/div[1]/p'); </span> <span class="token comment"># if ($elements->length > 0 ) $_links[$key]['teaser'] = $elements->item(0)->textContent;</span> <span class="token comment"># $elements = $xpath->query($nodexpath .'/div[2]/p'); </span> <span class="token comment">## Der textContent von div[2]/p ist auch schon in div[2] enthalten</span> <span class="token variable">$elements</span> <span class="token operator">=</span> <span class="token variable">$xpath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token variable">$nodexpath</span> <span class="token operator">.</span><span class="token string single-quoted-string">'/div[2]'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">## Der textContent von div[2]/p ist auch in div[2] enthalten</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$elements</span><span class="token operator">-></span><span class="token property">length</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'teaser'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$elements</span><span class="token operator">-></span><span class="token function">item</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token property">textContent</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">file_put_contents</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'sr-online.'</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Ymd_His'</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'.txt'</span><span class="token punctuation">,</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$_links</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">################################################################################################### </span> <span class="token comment">## HTML Out</span> <span class="token comment">################################################################################################### </span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$meta</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">HTML</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>de<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>SR-Online<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>pre</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token variable">$output</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$_links</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>pre</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Ich habe die Auskommentierten Versuche drin gelassen, damit man sehen kann, wie ich es außerdem noch versucht habe.</p> <p>Da in $node->textContent auch derjenige Textcontent der untergeordenten Nodes enthalten ist, wenn es solche gibt, benutze ich hier immer die übergeordneten.</p> <p>Man könnte wegen der Rückwandlung von Entities nun noch versuchen, die Einstellung</p> <pre><code class="block"> $dom->substituteEntities = true; </code></pre> <p>ausprobieren. Mir sind aber bisher noch keine Entities wieder untergekommen. Ich müsste dafür also extra nochmal ein Testdokument bauen.</p> <p>Bei der Ausgabe müsste man dann allerdings wieder dran denken, htmlspecialchars() zu verwenden, was man ja eigentlich sowieso lieber selber machen sollte und sich nicht darauf verlassen sollte, dass SR-Online schon fertig vorgekautes Material liefert. Wenn Du dir die $_errors ausgeben lässt, wirst Du nömlich feststellen, dass sie in den Links das Ampen (&amp;) vergessen haben. Das merkt der DOM-Parser.</p> <p>Tschüss<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643078#m1643078 TS ts-self@online.de 2015-06-14T18:55:46Z 2015-06-14T18:55:46Z SR-Nachrichten Excerpt, Grabbellösung <p>Hallo Leute,</p> <blockquote> <p>Entschuldige, wenn ich noch mal mit einem wahrscheinlich dummen Problem komme. Ich habe jetzt das sr-online-abholen in eine function gepackt um mir dann den Inhalte der description zurückgeben zu lassen. Offenbar mache ich etwas falsch oder habe was nicht kapiert beim "return".</p> </blockquote> <blockquote> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">function</span> <span class="token function-definition function">srholen</span> <span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">,</span> <span class="token variable">$zaehler</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$meta</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'<?xml encoding="UTF-8" ?'</span><span class="token operator">.</span><span class="token string single-quoted-string">'>'</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token variable">$dom</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMDocument</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">encoding</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">validateOnParse</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">strictErrorChecking</span> <span class="token operator">=</span> <span class="token constant boolean">true</span> <span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token property">preserveWhiteSpace</span> <span class="token operator">=</span> <span class="token constant boolean">true</span><span class="token punctuation">;</span> <span class="token variable">$dom</span><span class="token operator">-></span><span class="token function">loadHTML</span><span class="token punctuation">(</span><span class="token variable">$meta</span> <span class="token operator">.</span> <span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$xPath</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DOMXPath</span><span class="token punctuation">(</span><span class="token variable">$dom</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$xPath</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'//div/p'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$node2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$zaehler</span> <span class="token operator"><=</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span> <span class="token operator">!==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$rueckgabe</span> <span class="token operator">=</span> <span class="token variable">$node2</span><span class="token operator">-></span><span class="token property">nodeValue</span><span class="token punctuation">;</span> <span class="token comment">## Das verstehe ich hier sowieso nicht: Bei return ist foreach() zuende.</span> <span class="token comment">## Und wofür benötigst Du den Zähler? </span> <span class="token keyword">return</span> <span class="token variable">$rueckgabe</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Wenn ich vor dem return den Inhalt von $rueckgabe ausgeben lasse, ist alles drin, nach dem Aufrufen der Funktion ist nichts drin.</p> <pre><code class="block">srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html',$zaehler); echo $rueckgabe; </code></pre> <p>Woran kann denn das liegen?</p> </blockquote> <p>Hier sollte es wohl besser heißen:</p> <pre><code class="block language-php"><span class="token variable">$rueckgabe</span> <span class="token operator">=</span> <span class="token function">srholen</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">'http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html'</span><span class="token punctuation">,</span><span class="token variable">$zaehler</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$rueckgabe</span><span class="token punctuation">;</span> </code></pre> <p>oder auch in einem Schritt gleich</p> <pre><code class="block language-php"><span class="token keyword">echo</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span><span class="token function">srholen</span> <span class="token punctuation">(</span><span class="token string single-quoted-string">'http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html'</span><span class="token punctuation">,</span><span class="token variable">$zaehler</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Tschüss<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643084#m1643084 glupto info@nachrichtentisch.de http://nachrichtentisch.de 2015-06-14T19:22:07Z 2015-06-14T19:22:07Z SR-Nachrichten Excerpt, Grabbel- und Guck-Lösung <p>ich hatte es ja so gemacht (auf der jeweiligen Unterseite):</p> <pre><code class="block">foreach ($xPath->query('//div/p') as $node2) { </code></pre> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643083#m1643083 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-14T19:16:59Z 2015-06-14T19:16:59Z SR-Nachrichten Excerpt, Grabbellösung <p>Danke Danke Danke!</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643120#m1643120 Auge 2015-06-15T08:48:17Z 2015-06-15T08:48:17Z SR-Nachrichten Excerpt, Grabbellösung <p>Hallo</p> <blockquote> <p>Danke Danke Danke!</p> </blockquote> <p>Du solltest aber auch auf TS' Frage, die er in deinen Quelltext einfügte, antworten.</p> <pre><code class="block language-php"><span class="token comment">## Das verstehe ich hier sowieso nicht: Bei return ist foreach() zuende.</span> <span class="token comment">## Und wofür benötigst Du den Zähler? </span> </code></pre> <p>Deine Funktion riecht ganz stark danach, für jeden der Teaser einen eigenen Funktionsaufruf durchzuführen und damit für jeden Teaser das Dokument erneut zu parsen. Kannst du bitte noch einmal mit deinen Worten erklären, wie deine Funktion arbeitet?</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643134#m1643134 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T09:58:52Z 2015-06-15T09:58:52Z SR-Nachrichten Excerpt, Grabbellösung <blockquote> <p>Hallo</p> <blockquote> <p>Danke Danke Danke!</p> </blockquote> <p>Du solltest aber auch auf TS' Frage, die er in deinen Quelltext einfügte, antworten.</p> <pre><code class="block language-php"><span class="token comment">## Das verstehe ich hier sowieso nicht: Bei return ist foreach() zuende.</span> <span class="token comment">## Und wofür benötigst Du den Zähler? </span> </code></pre> <p>Deine Funktion riecht ganz stark danach, für jeden der Teaser einen eigenen Funktionsaufruf durchzuführen und damit für jeden Teaser das Dokument erneut zu parsen.</p> </blockquote> <p>Ich hatte die Frage übersehen, angesichts der (erfreulich) vielen Reaktionen ja auch nicht verwunderlich. Ich habe das Ganze jetzt ohnehin erst in eine Funktion gepackt, vorher stand das alles jeweils untereinander, ABER leider stehen die Teaser - Texte ja auf verschiedenen Seiten, so dass die Funktion jeweils eine neue Seite parsen muss. Das sieht jetzt so aus:</p> <pre><code class="block"><?php function srholen ($url, $zaehler) { $data = file_get_contents($url); $meta = '<?xml encoding="UTF-8" ?'.'>' . "\r\n"; $dom = new DOMDocument('1.0', 'utf-8'); $dom->encoding = 'utf-8'; $dom->validateOnParse = true; $dom->strictErrorChecking = true ; $dom->preserveWhiteSpace = true; $dom->loadHTML($meta . $data); $xPath = new DOMXPath($dom); foreach ($xPath->query('//div/p') as $node2) { if (($zaehler <= 10)&& ($node2->nodeValue !== '') && ($node2->nodeValue !== NULL)){ $array[$zaehler] = $node2->nodeValue; return $array[$zaehler]; } } } ?> </code></pre> <p>und im HTML wir das so aufgerufen:</p> <pre><code class="block"> <?php $zaehler=0; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html',$zaehler); $zaehler++; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html', $zaehler); $zaehler++; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-3.html', $zaehler); $zaehler++; </code></pre> <p>usw.</p> <p>Ich bin mit sicher, auch das geht noch eleganter, auf jeden Fall werden so die Teasertexte zusammengeholt und in ein array gepackt, später dann links und titles von der Indexseite und zusammen ausgegeben...</p> <p>Gruß glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643139#m1643139 glupto 2015-06-15T10:10:54Z 2015-06-15T10:10:54Z SR-Nachrichten Excerpt <p>Also bei stand bis eben:</p> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> <p>Mit dem Doppelpunkt hast Du natürlich recht!</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643145#m1643145 TS ts-self@online.de 2015-06-15T10:45:45Z 2015-06-15T10:45:45Z SR-Nachrichten Excerpt <p>Hallo und guten Morgen,</p> <blockquote> <blockquote> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Was mich bei deinen Beispielen kirre gemacht hat, ist die obige Zeile. Die wirkt, als hättest du sie falsch markiert aus einem HTML-Dokument entliehen. Die hier passt (Korrekturen: Anführungszeichen, Doppelpunkt vs. Gleichheitszeichen).</p> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset: UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Danke, ich habe es bei mir korrigiert.<br> Ein Wunder, dass es keinen Fehler gab.</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643147#m1643147 TS ts-self@online.de 2015-06-15T10:54:49Z 2015-06-15T10:54:49Z header('Content-Type: text/html; charset=UTF-8'); <p>Hallo und guten Morgen,</p> <blockquote> <blockquote> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8">'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Was mich bei deinen Beispielen kirre gemacht hat, ist die obige Zeile. Die wirkt, als hättest du sie falsch markiert aus einem HTML-Dokument entliehen. Die hier passt (Korrekturen: Anführungszeichen, Doppelpunkt vs. Gleichheitszeichen).</p> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset: UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Richtig ist:</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8"'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>oder</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet=utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>oder auch</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset=UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>aber keinesfalls mit Doppelpunkt bei der Angabe des CharSet.</p> <p>Vielleicht liest ja ein RFC-Kundiger mit, der die genaue Stelle kennt?</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643142#m1643142 TS ts-self@online.de 2015-06-15T10:33:17Z 2015-06-15T10:34:54Z Einen Datengrabber schreiben, wie geht es weiter? <p>Hallo und guten Morgen,</p> <blockquote> <blockquote> <p>Deine Funktion riecht ganz stark danach, für jeden der Teaser einen eigenen Funktionsaufruf durchzuführen und damit für jeden Teaser das Dokument erneut zu parsen.</p> </blockquote> </blockquote> <p>Das geht hier wohl tatsächlich nicht viel anders. Sieht man auch in meinem Lösungsvorschlag in<br> <a href="http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643075#m1643075" rel="noopener noreferrer">http://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643075#m1643075 </a></p> <p>Dort hole ich erst mit der Funktion get_links($node) die Linkliste und schreibe sie in ein Array</p> <pre><code class="block language-php"><span class="token variable">$_links</span><span class="token punctuation">[</span><span class="token variable">$index</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'href'</span><span class="token punctuation">]</span> <span class="token variable">$_linkls</span><span class="token punctuation">[</span><span class="token variable">$index</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'linktext'</span><span class="token punctuation">]</span> </code></pre> <p>Da die Anzahl der Links in dem Bereich immer variiert (zwischen vier und sieben habe ich bishe gesehen) und die dazugehörigen Seiten mit den Teasern leider auch öfter mal eine geringfügig andere HTML-Auszeichnung haben, muss man das Grabben hier möglichst flexibel halten.</p> <p>Anschließend werden mit Hilfe der Linkliste die Einzelseiten nochmal aufgerufen (einen Request könnte man da noch einsparen) und die Überschriften und der Teasertext ausgelesen und ebenfalls in das Array eingetragen.</p> <p>Wenn man das Array dann zusammengesammelt hat, kann es an die Ausgabe weitergereicht werden</p> <p>Für die Touch-Display-Version würde ich übrigens einen kleinen Extralink am Teaserlink anbringen, mit dem man die Teaserbox öffnen kann und in dieser dann ein Schließkreuz unterbringen und einen Link auf die Originalseite. Wahrscheinlich würde der auch bei der Desktopversion gar nicht stören. Übrigens hat Jeena P. mit seiner Bildergalerie <a href="http://forum.selfhtml.org/self/2015/jun/15/viele-thumbnails-schneller-laden-und-darstellen/1643106#m1643106" rel="noopener noreferrer">http://forum.selfhtml.org/self/2015/jun/15/viele-thumbnails-schneller-laden-und-darstellen/1643106#m1643106</a><br> ein ähnliches Problem.</p> <p>In meinem Demoscript habe ich zusätzlich für Debuggingzwecke noch die XPathes der im betroffenen Container vorhandenen Elemente gesammelt, weil man mit deren Hilfe die temporären Änderungen am Markup am besten erkennen kann. Das kann man für die operative Version natürlich wieder rausschmeißen oder eben einfach nicht benutzen.</p> <p>Glupto, lade dir das Script doch einfach mal auf deinen Testserver. Es müsste eigentlich sofort funktionieren, wenn der ins Internet darf.</p> <p>Generell würden mich hier jetzt noch noch drei Dinge interessieren:</p> <ul> <li>Die Fehlertoleranz für die Grabberlösung erhöhen</li> <li>Wann und wie sollte man auf Fehler im laufenden Betrieb reagieren und wie erkennt man die?</li> <li>Wie kann man mittels JavaScript in einer gegebenen (fremden) Webseite einen Bereich markieren und das Markup und die Nodes im DOM identifizieren? Das Ergebnis soll dann für das eigene Backend zur Verfügung stehen...</li> </ul> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643144#m1643144 Auge 2015-06-15T10:38:32Z 2015-06-15T10:38:32Z SR-Nachrichten Excerpt, Grabbellösung <p>Hallo</p> <blockquote> <p>Ich hatte die Frage übersehen, angesichts der (erfreulich) vielen Reaktionen ja auch nicht verwunderlich. Ich habe das Ganze jetzt ohnehin erst in eine Funktion gepackt, vorher stand das alles jeweils untereinander, ABER leider stehen die Teaser - Texte ja auf verschiedenen Seiten, so dass die Funktion jeweils eine neue Seite parsen muss.</p> </blockquote> <p>Du rufst die Funktion also <em>einmal pro Quell-URL</em> auf. Das passt schon. Bleibt also die Frage nach der Übergabe von <code>$zaehler</code> an die Funktion als Parameter. <code>$zaehler</code> stellt, wenn ich deinen Code richtig interpretiere, sicher, dass nur von elf Seiten (0 bis 10) Teaser eingesammelt werden und stellt zudem den Index für das dabei befüllte Array bereit.</p> <blockquote> <p>und im HTML wir das so aufgerufen:</p> <pre><code class="block"> <?php $zaehler=0; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html',$zaehler); $zaehler++; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html', $zaehler); $zaehler++; $array[$zaehler] = srholen ('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-3.html', $zaehler); $zaehler++; </code></pre> <p>Ich bin mit sicher, auch das geht noch eleganter, auf jeden Fall werden so die Teasertexte zusammengeholt und in ein array gepackt, später dann links und titles von der Indexseite und zusammen ausgegeben...</p> </blockquote> <p>Trifft meine oben aufgestellte These zum Zweck von <code>$zaehler</code> zu oder ist da noch etwas?</p> <p>Falls nicht, kannst du <code>$zaehler</code> „draußen“ (außerhalb der Funktion) lassen und dort die Beschränkung auf Werte von 0 bis 10 sicherstellen. Du brauchst dann „nur noch“ eine mit dem Zähler korrelierende Datenstruktur für die URLs der Datenquellen.</p> <pre><code class="block language-php"><span class="token comment"># Auflistung der URLs als Array</span> <span class="token variable">$srQuellURLs</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-3.html"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"…"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># (Pflege-)Wir zählen bis 10</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token variable">$zaehler</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token variable">$zeahler</span> <span class="token operator">>=</span> <span class="token number">10</span><span class="token punctuation">;</span> <span class="token variable">$zeahler</span><span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment"># der Wert von $zaehler gilt gleichermaßen für das URL-Array als auch für das Ergebnisarray </span> <span class="token variable">$array</span><span class="token punctuation">[</span><span class="token variable">$zaehler</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">srholen</span><span class="token punctuation">(</span><span class="token variable">$srQuellURL</span><span class="token punctuation">[</span><span class="token variable">$zaehler</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>In der Funktion kannst du dafür im If-Statement die Bedingung <code>($zaehler <= 10)</code> weglassen.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643140#m1643140 Auge 2015-06-15T10:20:38Z 2015-06-15T10:20:38Z SR-Nachrichten Excerpt <p>Hallo</p> <blockquote> <pre><code class="block">header("Content-Type: text/html; charset=UTF-8"); </code></pre> <p>Mit dem Doppelpunkt hast Du natürlich recht!</p> </blockquote> <p>Das ist auch eher eine Anmerkung für's Archiv. Natürlich kann es dort immer noch jemand falsch abgeschrieben werden, es steht aber noch einmal richtig dort herinnen. Falls sich einstmals jemand mit der Medaille <a href="http://forum.selfhtml.org/badges/edit_answer" rel="noopener noreferrer">Antworten editieren</a> daran erinnert, kann der Fehler auch direkt in TS' Antworten behoben werden.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643141#m1643141 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T10:30:01Z 2015-06-15T10:30:01Z SR-Nachrichten Excerpt <p>Wenn wir schon über's Kopieren reden: Vielleicht könntest Du Dir das hier am Seitenbeginn mal anschauen:</p> <pre><code class="block">ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")"); </code></pre> <p>Das hatte mir jemand mal empfohlen, aber ich habe es eigentlich nicht richtig verstanden, wozu ich diese Einstellungen setze. Ich weiß, das sollte ich...Aber ich habe mich da eben als php-Laie rangesetzt und war (und bin) auf Hilfe angewiesen.</p> <p>Gruß und Dank glupto</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643146#m1643146 Auge 2015-06-15T10:53:41Z 2015-06-15T10:53:41Z SR-Nachrichten Excerpt <p>Hallo</p> <blockquote> <pre><code class="block">ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")"); </code></pre> <p>Das hatte mir jemand mal empfohlen, aber ich habe es eigentlich nicht richtig verstanden, wozu ich diese Einstellungen setze.</p> </blockquote> <p>Was <code>ini_set</code> macht, sagt dir <a href="https://php.net/manual/en/function.ini-set.php" rel="noopener noreferrer">das Handbuch</a>. Kurze Zusammenfassung: Mit <code>ini_set</code> verändert man zur Skriptlaufzeit Einstellungen aus der php.ini. In der <a href="https://php.net/manual/en/ini.list.php" rel="noopener noreferrer">Liste der veränderbaren Einstellungen</a> findet sich auch <a href="https://php.net/manual/en/filesystem.configuration.php#ini.user-agent" rel="noopener noreferrer">user_agent</a>.</p> <p>Wenn du also mit, wie z.B. mit deiner Funktion, z.B. per HTTP(S) auf eine Seite zugreifst, wird, wie es auch ein Browser tut, bei der Anfrage eine User-Agent-Kennung mitgeschickt. Manche Serverbetreiber versuchen so für bestimmte Anfragen Such- aber allgemein insbesondere Spam-Robots abzufangen. Um seinen Zweck zu erfüllen soll hier also ein mehr oder minder unverdächtiger User-Agent-String geschickt werden.</p> <p>Deiner gibt korrekt die Quelle der Anfrage (ein als PHP-Skript laufender Feedreader, die vollständige URL des anfragenden Skriptes) an. Dass man da auch nicht Existentes vorgaukeln kann, sollte klar sein. Man kann dort schließlich hineinschreiben, was man will.</p> <blockquote> <p>Ich weiß, das sollte ich...Aber ich habe mich da eben als php-Laie rangesetzt und war (und bin) auf Hilfe angewiesen.</p> </blockquote> <p>Vergiss dennoch nicht, dich mit den Grundlagen zu beschäftigen. Das heißt nicht, dass du das allein tun musst, aber schlussendlich ist alles, was du selbst weißt, sowohl für dich als dieses Wissen Anwendender als auch für potentielle Fragen beanwortende „Mitspieler“ entlastend.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643150#m1643150 Jörg Reinholz http://www.fastix.org 2015-06-15T11:09:47Z 2015-06-15T11:16:12Z SR-Nachrichten Excerpt <p>Moin!</p> <blockquote> <pre><code class="block">ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")"); </code></pre> <p>Das hatte mir jemand mal empfohlen, aber ich habe es eigentlich nicht richtig verstanden, wozu ich diese Einstellungen setze. Ich weiß, das sollte ich...Aber ich habe mich da eben als php-Laie rangesetzt und war (und bin) auf Hilfe angewiesen.</p> </blockquote> <p>Diese Angabe landet in den Log-Files des Anbieters der über das Web abgeholten Ressource und hat technische und dann auch juristische Folgen:</p> <p><strong>A) Technik</strong></p> <p>Der Anbieter hat die Möglichkeit den Zugriff explizit zu erlauben oder zu verhindern.</p> <p><strong>B) Juristische</strong></p> <p><strong>Möglicher Sachstand:</strong></p> <ul> <li>Nehmen wir mal an, das Abholen der Ressource und die Weiterverarbeitung beträfe rechtlich geschützte Inhalte und wäre (womöglich) nicht rechtens.</li> <li>Der Anbieter lässt Dich abmahnen - mit einer Rechnung von 1800 €.</li> <li>Der Anbieter sperrt aber den Zugriff nicht.</li> <li>Du reagierst zunächst nicht auf die Abmahnung, weil Du gerade im Urlaub bist.</li> <li>Der Anbieter holt sich eine Einstweilige Verfügung.</li> <li>Du argumentierst vor Gericht, dass zumindest die Eilbedürftigkeit nicht gegeben sein dürfte, weil der Anbieter den schnellsten, billigsten und offensichtlichsten Weg, nämlich die technische Sperre durch einen einfachen Eintrag in .htaccess nicht vorgenommen habe, sondern erst abmahnte und dann die EV beantragte.</li> <li>Du gibst fix die Unterlassungserklärung ab.</li> </ul> <p><strong>Deine mögliches Argumentation:</strong></p> <ol> <li>Die behauptete Eilbedürftigkeit war tatsächlich nicht gegeben, weil der Antragsteller die zumutbare und einfache Sperre nicht vornahm.</li> <li>Ergo könne auch der Eingriff in seine Rechte nicht so schwerwiegend gewesen sein, dass dieses eine Klage zu einem Streitwert von trentiquilliarden Euro rechtfertige - denn wenn er den Schaden behauptet, dann hätte er den Abruf verhindert.</li> <li>Der Antragsteller will zusammen mit seinem Anwalt nur abzocken, sonst hätte er ja auch gesperrt (nett, wenn mehrere das Problem mit dem Anbieter haben)...</li> </ol> <p><strong>Mögliche Folgen:</strong></p> <ol> <li>Das Gericht weisst den Antrag auf den Erlass der Einstweiligen Verfügung wegen Rechtsmissbrauchs zurück.</li> <li>Das Gericht legt den Streitwert sehr viel niedriger fest als sich das der Gegner-Anwalt gewünscht hätte.</li> <li>Das Gericht ordnet dem Gegner die Kosten für die Abwehr der zu hohen Kostenforderung für die Abmahnung zu.</li> </ol> <p>Darauf würde ich vor dem Land- (und Rechtsmissbrauchs-) Gerichten Hamburg, Berlin, Köln aber nicht wetten. Vor anderen Gerichten wäre es durchaus möglich.</p> <p><strong>Zwingende Folge der schnell abgegebenen Unterlassungserklärung</strong></p> <ul> <li>Ein teures Hauptsacheverfahren wird unmöglich. Vor den Gerichten in Hamburg, Berlin, Köln ist aber alles möglich, Richter am LG Mönchengladbach müssen sogar erst vom OLG Düsseldorf erfahren wer welchen Antrag unvertreten stellen darf <a href="http://www.fastix.org/euroweb/OLG_Beschluss_11.09.2014_I_20_W_131_12_Euroweb_Reinholz.pdf" rel="nofollow noopener noreferrer">und wer mit welcher Äußerung gemeint ist, wenn das explizit dabei steht</a>.</li> </ul> <p><strong>Auch wenn manche Richter in Deutschland den Job auf eine Weise machen, dass man sie in der Wirtschaft achtkantig feuern würde</strong>, bietet die Einstellung also gewisse Chancen.</p> <p>Jörg Reinholz</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643151#m1643151 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T11:14:29Z 2015-06-15T11:14:29Z Einen Datengrabber schreiben, wie geht es weiter? <p>Also, ich habe das Script jetzt 1 zu 1 kopiert und hochgeladen und laufen lassen, bisher kommt gar nix. Werde es mal im Detail durchschauen.</p> <p>An das Schließkreuz am Teaser hatte ich schon gedacht, hatte das dann aber erstmal aufgeschoben, der Link ist ja bei "...mehr" schon drin. Aber die Öffnung des Teasers ohne extra Symbol sondern einfach durch drauftippen finde ich gar nicht so schlecht. Ein Extra-Symbol nimmt nur wieder Platz weg.</p> <p>Was ich viel lieber hätte, wäre eine Möglichkeit für die Nutzer, sich selbst die Medien auszusuchen und ob Teaser oder nicht und wieviel Schlagzeilen - und das alles nur per Cookie ohne Datenbank.... Aber dazu fehlen mir Kenntnisse in Cookie - Setzung und Abrufen...</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643160#m1643160 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T11:56:26Z 2015-06-15T11:56:26Z Einen Datengrabber schreiben, wie geht es weiter? <blockquote> <p>Für die Touch-Display-Version würde ich übrigens einen kleinen Extralink am Teaserlink anbringen, mit dem man die Teaserbox öffnen kann und in dieser dann ein Schließkreuz unterbringen und einen Link auf die Originalseite. Wahrscheinlich würde der auch bei der Desktopversion gar nicht stören. Übrigens hat Jeena P. mit seiner Bildergalerie <a href="http://forum.selfhtml.org/self/2015/jun/15/viele-thumbnails-schneller-laden-und-darstellen/1643106#m1643106" rel="noopener noreferrer">http://forum.selfhtml.org/self/2015/jun/15/viele-thumbnails-schneller-laden-und-darstellen/1643106#m1643106</a><br> ein ähnliches Problem.</p> </blockquote> <p>Ich hatte übrigens zum Thema tooltip-schließkreuz hier schon mal was gepostet, aber leider keine Antwort bekommen...</p> <p><a href="http://forum.selfhtml.org/self/2014/mar/11/link-in-tooltip-einbauen/1605024#m1605024" rel="noopener noreferrer">Linkbeschreibung</a></p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643152#m1643152 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T11:20:13Z 2015-06-15T11:20:13Z SR-Nachrichten Excerpt, Grabbellösung <p>Danke, ja, das ist eleganter. Der Zaehler ist wirklich nur zum Befüllen des Teaser-Arrays da und später für die Zuordnung der Teasertexte zum title und Link.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643148#m1643148 Auge 2015-06-15T10:56:20Z 2015-06-15T10:56:20Z SR-Nachrichten Excerpt <p>Hallo</p> <blockquote> <blockquote> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset: UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Danke, ich habe es bei mir korrigiert.<br> Ein Wunder, dass es keinen Fehler gab.</p> </blockquote> <p>Ich vermute, dass der Server von sich aus ebenfalls einen entsprechenden Header schickte und dein „kaputter“ günstigstenfalls vom Browser ignoriert und stillschweigend durch den des Servers ersetzt wurde.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643149#m1643149 Auge 2015-06-15T11:01:50Z 2015-06-15T11:01:50Z header('Content-Type: text/html; charset=UTF-8'); <p>Hallo</p> <blockquote> <blockquote> <pre><code class="block language-php"><span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset: UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Richtig ist:</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet="utf-8"'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Nö.</p> <blockquote> <p>oder</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; CharSet=utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Ja.</p> <blockquote> <p>oder auch</p> <pre><code class="block language-php"> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Content-Type: text/html; charset=UTF-8'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Ja.</p> <blockquote> <p>aber keinesfalls mit Doppelpunkt bei der Angabe des CharSet.</p> </blockquote> <p><a href="http://www.w3.org/International/O-HTTP-charset.de.php" rel="nofollow noopener noreferrer">Korrekt</a>. Sorry für die halbfalsche Fährte.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.<br> Terry Pratchett, „Gevatter Tod“ </div> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643172#m1643172 woodfighter 2015-06-15T13:45:21Z 2015-06-15T13:45:21Z header('Content-Type: text/html; charset=UTF-8'); <p>Tach,</p> <blockquote> <p>Vielleicht liest ja ein RFC-Kundiger mit, der die genaue Stelle kennt?</p> </blockquote> <p><a href="https://www.ietf.org/rfc/rfc2616.txt" rel="nofollow noopener noreferrer">RFC 2616, Kapitel 14.17, 3.4 und 3.7</a></p> <p>mfg<br> Woodfighter</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643153#m1643153 TS ts-self@online.de 2015-06-15T11:21:07Z 2015-06-15T11:21:07Z Einen Datengrabber schreiben, wie geht es weiter? <p>Hallo und schönen Mittag,</p> <blockquote> <p>Also, ich habe das Script jetzt 1 zu 1 kopiert und hochgeladen und laufen lassen, bisher kommt gar nix. Werde es mal im Detail durchschauen.</p> </blockquote> <p>Das ist ein bisschen wenig. :-O</p> <p>können wir die Seite auch aufrufen? Dann gib uns meine URL und setz doch oben über die Zeile mit header() mal</p> <pre><code class="block language-php"><span class="token function">error_reporting</span><span class="token punctuation">(</span><span class="token constant">E_ALL</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ini_set</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'display_errors'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>rein. dann müssten Fehlermeldungen kommen.<br> Vielleicht ist <em><strong>allow_url_fopen</strong></em> nicht of ON?</p> <p>Grüße<br> TS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643156#m1643156 glupto info@nachrichtentisch.de http://www.nachrichtentisch.de 2015-06-15T11:37:22Z 2015-06-15T11:37:22Z Einen Datengrabber schreiben, wie geht es weiter? <p>ach, die Formatierungen waren nicht mitgekommen, so dass er nur Murks zur Verarbeitung hat - ich muss nachher zuhause mal das Ganze in den notepad-editor kopieren, den habe ich hier auf der Arbeit nicht.</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643174#m1643174 RS 2015-06-15T14:01:49Z 2015-06-15T14:01:49Z header('Content-Type: text/html; charset=UTF-8'); <blockquote> <p>Tach,</p> <blockquote> <p>Vielleicht liest ja ein RFC-Kundiger mit, der die genaue Stelle kennt?</p> </blockquote> <p><a href="https://www.ietf.org/rfc/rfc2616.txt" rel="nofollow noopener noreferrer">RFC 2616, Kapitel 14.17, 3.4 und 3.7</a></p> </blockquote> <p>Jetzt <a href="https://tools.ietf.org/html/rfc7231" rel="nofollow noopener noreferrer">https://tools.ietf.org/html/rfc7231</a> ff</p> <p>Abschnitt 3.1.1.1 ff</p> <p>Ciao RS</p> https://forum.selfhtml.org/self/2015/jun/11/htmlentities-bereinigen/1643175#m1643175 woodfighter 2015-06-15T14:12:57Z 2015-06-15T14:12:57Z header('Content-Type: text/html; charset=UTF-8'); <p>Tach,</p> <blockquote> <blockquote> <p><a href="https://www.ietf.org/rfc/rfc2616.txt" rel="nofollow noopener noreferrer">RFC 2616, Kapitel 14.17, 3.4 und 3.7</a></p> </blockquote> <p>Jetzt <a href="https://tools.ietf.org/html/rfc7231" rel="nofollow noopener noreferrer">https://tools.ietf.org/html/rfc7231</a> ff</p> <p>Abschnitt 3.1.1.1 ff</p> </blockquote> <p>danke, das lerne ich wohl nicht mehr und warte stattdessen direkt auf HTTP/2.</p> <p>mfg<br> Woodfighter</p>