Ik maak gebruik van het zoekscript (http://www.phphulp.nl/php/scripts/3/569/). Nu ben ik dit script naar mijn wensen aan het aanpassen en wil ik html uit de zooekresultaten verwijderen. Het lukt me echter niet om html uit de output te strippen dmv strip_tags. Hoe kan ik dit het beste toepassen, tot nu toe kreeg ik alleen foutmeldingen.
De functie strip_tags is niet helemaal waterdicht.
Als bezoekers met opzet foutieve html code opgeven kunnen ze er makkelijk door heen komen.
Zou iemand deze code opgeven, ben je alsnog de l*l
'<a<br> href="linkje">LINKJE<<br>/a>'
Met het strippen zouden alleen de valide (in dit voorbeeld <br> tags) worden verwijderd.. 'toevallig' blijft er in dit geval dan weer een valide HTML tag over
'<a href="linkje">LINKJE</a>'
De functie moet daarom i.i.g. recursief plaatsvinden.
Daarnaast is er nog een attributen probleem, de striptag kan niet goed met de quotjes in de attributen overweg, op deze manier zijn er via dergelijke methoden alsnog HTML code in te smokkelen.
De beste methode is nog altijd HTMLENTITIES.. Geef alle troep maar weer en escaped daarbij de HTML syntax, dan weet de bezoeker dat zijn pogingen om HTML toe te voegen onbegonnenwerk is.
<?php
// Strips all HTML tags from a string
function stripHtml($string)
{
$expr = "/<(((\/?\w+)((((\s+\w+)((\s*)=(\s*)((\w+)|('.*?')|(\".*?\")))?)?)*)(\s*)(\/?))|(!--(.*?)--))>/";
// Note: after stripping a HTML-tag, in theory a new tag could occur. (But only when people do this intentionaly)
// To make sure not a single tag survives, we repeat stripping untill all tags are removed.
while(preg_match($expr, $string))
{
$string = preg_replace($expr, "", $string);
}
return $string;
}
?>
Zou iemand deze code opgeven, ben je alsnog de l*l
'<a<br> href="linkje">LINKJE<<br>/a>'
Met het strippen zouden alleen de valide (in dit voorbeeld <br> tags) worden verwijderd.. 'toevallig' blijft er in dit geval dan weer een valide HTML tag over
Ok bedankt voor de reacties, goede tips. Striphtml is dus niet zo'n succes, hoe pas ik de HTMLENTITIES methode toe in onderstaande deel?
Ik ben me aan het verdiepen in php maar ben blijkbaar nog niet ver genoeg om onderstaande aan te passen :(
<?
// BEREKENINGEN
$pages = ceil($aantal/$_GET['result']);
$limit = "ORDER BY titel ASC LIMIT " . $_GET['start'] . "," . ($_GET['start'] + $_GET['result']);
$res = mysql_query($sql . " " . $limit);
echo "<p>Er zijn <B>" . $aantal . "</B> zoekresultaten.</p>";
//ZOEKRESULTATEN WEERGEVEN
while($row = mysql_fetch_array($res)){
// DE TITEL
echo "<p><A HREF='".$nextpage."?tid=" . $row['id'] . "'>".search_result($row['titel'],$_GET['zoek']) . "</a><br>";
$row['tekst'] = search_result($row['tekst'],$_GET['zoek']);
// WEERGEEF EERSTE 70 WOORDEN VAN DE TEKST
if(strlen($row['tekst']) > 70){ $dots = '..';}
echo "<i>" . substr($row['tekst'],0,70) . "</i>".$dots."<br>";
// LAATSTE 70 WOORDEN WEERGEVEN, INDIEN TEKST MEER DAN 140 TEKENS HEEFT
if(strlen($row['tekst']) > 140){
echo ".. <i>" . substr($row['tekst'],-70,70) . "</i>";
}
echo "</p>";
}
?>