Strip html uit zoekresultaten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bram Sluiter

Bram Sluiter

16/01/2007 00:14:00
Quote Anchor link
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.

Gr. Bram
 
PHP hulp

PHP hulp

16/11/2024 21:41:13
 
- SanThe -

- SanThe -

16/01/2007 05:33:00
Quote Anchor link
Foutmeldingen? Welke?
 
Martijn Wieringa

Martijn Wieringa

16/01/2007 08:50:00
Quote Anchor link
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.

Als je persé kiest voor het strippen voor HTML, zou ik voor deze functie kiezen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }


?>
 
- SanThe -

- SanThe -

16/01/2007 09:10:00
Quote Anchor link
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>'

Interessant, zo had ik het nog niet bekeken.
 
Bram Sluiter

Bram Sluiter

16/01/2007 12:53:00
Quote Anchor link
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 :(

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
// 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
 
Joren de Wit

Joren de Wit

16/01/2007 13:02:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "<i>" . htmlentities(substr($row['tekst'],0,70)) . "</i>".$dots."<br>";
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.