Bei QUAKENET habe ich folgenden Code von einem Userkommentar gefunden:
PHP-Code:
function strip_tags_attributes($string,$allowtags=NULL,$allowattributes=NULL){
if($allowattributes){
if(!is_array($allowattributes))
$allowattributes = explode(",",$allowattributes);
if(is_array($allowattributes))
$allowattributes = implode("|",$allowattributes);
$rep = '/([^>]*) ('.$allowattributes.')(=)(\'.*\'|".*")/i';
$string = preg_replace($rep, '$1 $2_-_-$4', $string);
}
if(preg_match('/([^>]*) (.*)(=\'.*\'|=".*")(.*)/i',$string) > 0){
$string = preg_replace('/([^>]*) (.*)(=\'.*\'|=".*")(.*)/i', '$1$4', $string);
}
$rep = '/([^>]*) ('.$allowattributes.')(_-_-)(\'.*\'|".*")/i';
if($allowattributes)
$string = preg_replace($rep, '$1 $2=$4', $string);
return strip_tags($string,$allowtags);
}
Wie man sieht kann man den Parameter mit den erlaubten Attributen auch per array übergeben. Genau das habe ich auch gemacht, siehe hier:
PHP-Code:
function strphtml($str_input,$stripall=false,$dbescape=true) {
$allowed_tags=array(
'<p>','<br>','<font>','<span>',
'<pre>','<strong>','<b>','<i>',
'<em>','<u>','<s>','<strike>',
'<table>','<tr>','<td>','<th>',
'<ul>','<ol>','<li>','<img>'
);
$allowed_attribs=array(
'class','name','id','colspan',
'rowspan','width','height','href',
'target','alt','src','border','align',
'valign'
);
if ($stripall==true) {
$ret=strip_tags($str_input);
} else {
$ret=strip_tags_attributes($str_input,implode($allowed_tags),$allowed_attribs);
}
if ($dbescape==true) {
global $db;
$ret=$db->real_escape_string($ret);
}
return $ret;
}
Leider funktioniert es nicht. Beispielsweise wird das Attribut
HTML-Code:
<p onClick="alert('Warnung! Javascript-Attribut!');">Hallo</p>
nicht entfernt. Ich kenne mich mit regulären Ausdrücken nicht aus und steige durch diesen Zeichensalat nicht durch. Kann mir jemand helfen? Was läuft dort falsch? Oder ist meine Funktion strphtml(); fehlerhaft?
lg BloodySword