heinetz: preg_replace bzw. htmlentities | macht das so Sinn ?

Hallo Forum,

ich baue gerade ein XHTM/PHP Projekt auf. Die mit XHTML formatierte
Content werden in includes gehalten. Z.B. so:

$content_code_str = '
<p>Der <span class="formatiert">formatierte</span> Text </p>';

Beine Befüllen der inludes kopiere ich die Texte 1. Absatzweise
aus einem Drehbuch in eine leeres Dokument, ersetze dann 2. die
Sonderzeichen (Homesite) und setze den maskierten Text dann in
das include ein und formatiere ihn mit XHTML-Tags.

Um mir die Arbeit bei Befüllen dieser includes zum Einen zu
erleichern und zum Anderen Fehler zu minieren, habe ich mir
überlegt, ob ich nicht auf das Ersetzen der Sonderzeichen
verzichten kann, um das php-seitig vor der Ausgabe zu machen.

Der einfachste Ansatz wäre:

$content_code_str = htmlentities($content_code_str); //maskiert alles
$content_code_str = str_replace('&lt;', '<', $content_code_str); //demaskiert '<'
$content_code_str = str_replace('&gt;', '>', $content_code_str); //demaskiert '>'

Der eizige Haken, den ich mir vorstellen kann ist der, dass hinterher
'<' und '>' als Text nicht mehr maskiert wären.

Gibt's sonst noch etwas, dass gegen den Ansatz spricht  ?

Was meint Ihr ?

besten Dank für's Lesen und

schoenen Abend,
heinetz

  1. echo $begrüßung;

    $content_code_str = '<p>Der <span class="formatiert">formatierte</span> Text </p>';
    Der einfachste Ansatz wäre:

    Ist er nicht.

    $content_code_str = htmlentities($content_code_str); //maskiert alles
    $content_code_str = str_replace('&lt;', '<', $content_code_str); //demaskiert '<'
    $content_code_str = str_replace('&gt;', '>', $content_code_str); //demaskiert '>'

    Der eizige Haken, den ich mir vorstellen kann ist der, dass hinterher
    '<' und '>' als Text nicht mehr maskiert wären.

    Du hast " und & vergessen. Wenn du eins der Zeichen <, > und & und innerhalb von Attributen auch " im mit HTML-Code gespickten Fließtext stehen hast und diese Zeichen nicht gemäß den Regeln zur Maskierung HTML-eigener Zeichen notiert hast, ist das falsch. Wenn du die Regeln beachtet hast, dann wird beispielsweise ein &lt; durch htmlentities() oder htmlspecialchars() zu &amp;lt; Wenn du mit str_replace() die &amp; wieder zu & machst, wird das Fließtext-< wieder zum korrekt notierten &lt;

    Gibt's sonst noch etwas, dass gegen den Ansatz spricht  ?

    Ja, es spricht das unnötige Verwenden von Entities und Nummerischen Zeichenreferenzen anstelle der direkten Verwendung dieser Zeichen nebst passender Kodierungsangabe dagegen.

    echo "$verabschiedung $name";