Thread HTML::Parser - Attribute von HTML ändern, welche sich nicht(!) unterhalb <pre> oder <code> befinden (21 answers)
Opened by GwenDragon at 2023-01-30 18:12

haj
 2023-01-31 10:09
#194615 #194615
User since
2015-01-07
558 Artikel
BenutzerIn

user image
2023-01-30T17:12:57 GwenDragon
Mist, kaum ist da so ein Schnippsel im HTML:
Code: (dl )
1
2
3
4
5
6
7
8
9
<?php
# auch hier nix ändern
# <a href="test.html" title="Erster Test" class="c1">Test 1</a>
echo "<a href="test.html" title="Erster Test" class="c1">Test 1</a>";
?>

<?
echo "<a href="test.html" title="Erster Test" class="c1">Test 1</a>";
?>

dann erzeugt den Schnippsel:
Code: (dl )
1
2
3
4
5
6
7
8
9
<?php
# auch hier nix õndern
# <a href="test.html" title="Erster Test" class="c1">Test 1</a>
echo "<a title="Erster Test" class="c1" href="https://example.org/tests/test.html">Test 1</a>";
?>

<?
echo "<a href="test.html" title="Erster Test" class="c1">Test 1</a>";
?>


Seltsam, warum schlug das denn beim obigen Code nicht an?
Ich hachte Zeile 76 fängt das ab?


Um das zu beheben, musst Du Deinem Parser eine weitere Konfiguration verpassen:
Code (perl): (dl )
 $p->xml_pic( 1 );

Der Grund: Per default beendet der CPAN:HTML::Parser "Processing instructions" (PIs) mit der SGML-Syntax, das heißt, mit einem einfachen '>'. Wenn also Dein PHP-Schnipsel, wie im obigen Beispiel, HTML-Tags enthält, dann hört für den Parser die PI nach dem ersten Tag auf und danach wird wieder HTML interpretiert. Deswegen ist der Link in der echo-Anweisung wieder ein Link. Also muss man dem Parser sagen, dass PIs erst mit '?>' aufhören, wie's in XML üblich ist.

Das Originalbeispiel und Dein zweiter PHP-Schnipsel funktionieren "zufällig", weil das '<a ' auch nach SGML-Syntax noch zur PI gezählt wird!

View full thread HTML::Parser - Attribute von HTML ändern, welche sich nicht(!) unterhalb <pre> oder <code> befinden