2009-06-09 3 views
2

In einem PHP-Skript akzeptiere ich Eingaben vom Benutzer von einem textarea und möchte ein paar grundlegende Tags zulassen. Also, wenn ich Ausgabe der Zeichenfolge Ich verwende -Nach dem Entfernen von unerwünschten Tags, was sollte ich noch tun, um Text einzugeben?

echo strip_tags($content, '<b><i><ul><ol><li>'); 

Jetzt normalerweise würde ich FILTER_SANITIZE_STRING verwenden, aber das würde alle Tags Streifen und ich würde html_entities() verwenden, aber das würde verhindern, dass die Tags ich durch von der Anzeige, wie sie mich vorbei sollte.

Was muss ich sonst noch entfernen oder kodieren und wie mache ich das?

Antwort

3

Ich glaube nicht, dass Sie auf strip_tags() aus Sicherheitsgründen verlassen können - von http://php.net/strip_tags:

Diese Funktion modifiziert keine Attribute auf Die Tags, die Sie erlauben mit zulässigen_Tags, einschließlich der Stil und OnMouseOver-Attribute, die ein schelmischer Benutzer missbrauchen kann, wenn Posting Text, der anderen Benutzern angezeigt wird.

Es wäre besser, etwas zu sehen, wie HTML Purifier oder PEAR HTML_Safe, die in der Lage sein sollten, genau das zu tun, was Sie wollen.

+0

vertraut zu machen. Ich empfehle den HTML Purifier auch. – Shoan

1

Es gibt einige Attribute, die Sie wahrscheinlich entfernen möchten, zum Beispiel style. Sie können auch Event-Handler wie onMouseOver und onClick entfernen usw.

1

ich Erfolg mit Cal Henderson hatte lib_filter in der Vergangenheit, die ein sehr gutes leicht PHP4 ist/5 Bibliothek zum Filtern von Tags und Attributen aus der Eingabe. Sie können die erlaubten Tags/Attribute über die 'erlaubte' Mitgliedsvariable z.B. der folgende Code bereinigt Code einbetten von Seiten wie YouTube/Vimeo/Flickr etc., aber abstreift alles andere:

 $lib_filter = new lib_filter(); 
     $lib_filter->allowed = array(
      'object' => array('width', 'height'), 
      'param' => array('name', 'value'), 
      'embed' => array('src', 'type', 'allowscriptaccess', 'allowfullscreen', 'width', 'height') 
     ); 
     $video = $lib_filter->go($input); 
0

Wie über diese

function stripSingleTags($tags, $string) 
{ 
    foreach($tags as $tag) 
    { 
     $string = preg_replace('#</?'.$tag.'[^>]*>#is', '', $string); 
    } 
    return $string; 
} 

/*** example usage ***/ 
$string = '<p>stuff</p><span>more <span class="foo">and even>< more</span> stuff here</span>'; 

$tags = array('h1', 'span'); 

echo stripSingleTags($tags, $string); 

Quelle: http://www.phpro.org/examples/Strip-Single-Tag.html

Verwandte Themen