Hallo zusammen,
ich habe einen String
PHP-Code:
$text = '
<html>
<head> </head>
<!--
entfernen
-->
<!--[if IE]>
nicht entfernen
<![endif]-->
<body>
Das ist nur ein Test<br />
<br />
<pre>Der Whitespace
hier
darf nicht entfernt werden.
</pre>
<pre class="test"> Test </pre>
</body>
</html>
';
aus dem ich sämtlichen Whitespace, also Umbrüche und alle Leerzeichen zwischen > und <, sowie HTML-Kommentare entfernen möchte; wichtig dabei ist jedoch, dass alles zwischen <pre>-Tags unberücksichtigt bleibt.
Meine bisherigen Ansätze mittels preg_replace waren wenig erfolg-versprechend: ich weiß zwar, wie ich mittels RegEx die <pre>-Tags identifiziere. Jedoch hilft mir das nicht weiter, da ich es nicht hinbekomme, diese Tags unberücksichtigt zu lassen.
PHP-Code:
$text2 = preg_replace(
array(
'#(<pre.*>.*</pre>)#Us'
),
array(
'$1'
),
$text
);
Oben genanntes identifiziert die <pre>s richtig, nun muss ich da nur noch den Whitespace rausbekommen.
Nach einiger Recherche bekomme ich zwar Ansätze (negative Lookahead), jedoch schaffe ich es nicht, diese richtig einzusetzen. Negative Lookaheads müssen m.W. immer eine feste Länge haben, ich kann also z.B. sowas
/(!?<\<pre.*>)/ nicht nutzen.
Vielleicht hat schon mal jemand etwas ähnliches gemacht oder hat eine Idee dazu.
Hier noch einmal die Anforderungen:
- Jegliche Umbrüche außerhalb von <pre>-Tags sollen entfernt werden
- Jedes Leerzeichen (außerhalb von <pre>-Tags) nach > bis zum nächsten nicht-Leerzeichen soll entfernt werden
- <pre>-Tags können Attribute enthalten (z.B. class="javascript")
- Aufeinanderfolgende Leerzeichen (außerhalb von <pre>-Tags) sollen durch ein Leerzeichen ersetzt werden
- HTML-Kommentare, die keine Conditional Comments sind, sollen entfernt werden
Vielen Dank und beste Grüße,
Lars