Sven Rautenberg: Selbstgebautes htmlentities() scheitert an Sonderzeichen + UTF-8

Beitrag lesen

Moin!

Ja, das dachte ich hätte ich in dem "Exkurs" ausführlich genug erklärt. Aber ok, dann noch ausführlicher ;-)

Nicht ausführlicher - konkreter. :)

<div>
<h1><?php echo(htmlspecialchars($divTitle)); ?></h1>
<?php echo(strip_tags($divBody, ALLOWED_HTML); ?>
</div>

  

> ~~~php
  

> <input type="text" name="divTitle" id="divTitle" value="<?php echo(htmlspecialchars($divTitle)); ?>" />  
> <textarea class="tinyMCE" name="divBody" id="divBody"><?php echo(htmlspecialchars($divBody)); ?></textarea>  
> 

Das ist so, wie es angewendet ist, alles vollkommen ok. Vielleicht bis auf die Tatsache, dass echo keine Funktion ist, und deshalb keine Klammern um die auszugebenden Bestandteile notwendig sind - ich würde sie immer weglassen, Klammern hat man in PHP schon so genug.

In der DB wird alles unmaskiert gespeichert, wie bereits gesagt.

Also auch unmaskierter HTML-Quellcode. Ist ja aber nicht schlimm - auch als UTF-8 nicht.

Warum kann man nicht für meinen Fall generell sagen, dass
* htmlspecialchars() benutzt werden soll, wenn man HTML nicht interpretiert haben möchte (im divTitle und bei den values der Formularfelder)

Das konnte ich nicht generell sagen, weil du die Ausgabe von Text-in-HTML und HTML-als-HTML gemischt hast.

* diese Spezialmethode mit strip_tags() benutzt werden soll, wenn vom Benutzer eingegebenes HTML ausgegeben und interpretiert werden soll (wie beim divBody)

Tja, ob strip_tags so verlässlich ist, ist immer die Frage. Für freundlich gesinnte Benutzer wie die Anwender eines CMS, bei denen man davon ausgehen kann, dass sie an vernünftigen Resultaten ein Interesse haben, kann man sie sicherlich anwenden. Bei Situationen, in denen man befürchten muss, dass man wirklich böse Eingaben erhält, sollte man strip_tags nicht anwenden, sondern einen echten HTML-Parser (sofern man denn unbedingt HTML erlauben will, und nicht irgendeinen Metacode wie z.B. phpBB-Code) drauf ansetzen.

- Sven Rautenberg