Strip html uit zoekresultaten
Gr. Bram
Foutmeldingen? Welke?
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.
Als je persé kiest voor het strippen voor HTML, zou ik voor deze functie kiezen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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;
}
?>
// 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;
}
?>
Pholeron schreef op 16.01.2007 08:50:
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>'
'<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>'
Interessant, zo had ik het nog niet bekeken.
Ik ben me aan het verdiepen in php maar ben blijkbaar nog niet ver genoeg om onderstaande aan te passen :(
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
// 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>";
}
?>
// 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>";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Bram Sluiter