Disinfezione dell'ingresso HTML

Sto pensando di aggiungere un editor di text avanzato per consentire a un non programmatore di cambiare l'aspetto del text. Tuttavia, un problema è che è ansible distorcere il layout di una pagina sottoposta a rendering se la marcatura non è corretta. Qual è un buon metodo leggero per disinfettare l'html?

Dovrai decidere tra buono e leggero. La scelta consigliata è 'HTMLPurifier', perché fornisce impostazioni predefinite sicure senza problemi. Come alternativa più veloce è spesso consigliato usare ' htmLawed '.

Vedi anche questa panoramica abbastanza obiettiva dall'autore HTMLPurifier: http://htmlpurifier.org/comparison

Mi piace molto HTML Purifier , che ti permette di specificare quali tag e attributi sono permessi nel tuo codice HTML e genera HTML valido.

Usa i codici BB (o come qui su SO), altrimenti le possibilità sono molto ridotte. Esempio di function …

function parse($string){ $pattern = arrays( "/\[url\](.*?)\[\/url\]/", "/\[img\](.*?)\[\/img\]/", "/\[img\=(.*?)\](.*?)\[\/img\]/", "/\[url\=(.*?)\](.*?)\[\/url\]/", "/\[red\](.*?)\[\/red\]/", "/\[b\](.*?)\[\/b\]/", "/\[h(.*?)\](.*?)\[\/h(.*?)\]/", "/\[p\](.*?)\[\/p\]/", "/\[php\](.*?)\[\/php\]/is" ); $replacement = arrays( '<a href="\\1">\\1</a>', '<img alt="" src="\\1"/>', '<img alt="" class="\\1" src="\\2"/>', '<a rel="nofollow" target="_blank" href="\\1">\\2</a>', '<span style="color:#ff0000;">\\1</span>', '<span style="font-weight:bold;">\\1</span>', '<h\\1>\\2</h\\3>', '<p>\\1</p>', '<pre><code class="php">\\1</code></pre>' ); $string = preg_replace($pattern, $replacement, $string); $string = nl2br($string); return $string; } 

 echo parse("[h2]Lorem Ipsum[/h2][p]Dolor sit amet[/p]"); 

Risultato…

 <h2>Lorem Ipsum</h2><p>Dolor sit amet</p> 

inserisci la descrizione dell'immagine qui

O semplicemente usa HTML Purifier 🙂

Sia HTML Purifier che htmLawed sono buoni. htmLawed ha il vantaggio di un ingombro molto più ridotto e un'alta configurabilità. Oltre a svolgere il lavoro standard di bilanciamento dei tag, filtrando specifici tag HTML o i loro attributi o il loro contenuto (tramite liste bianche o nere), ecc., Consente anche l'uso di funzioni personalizzate.