2010-08-06 5 views
0

Je développe un site web utilisant PHP, MySQL et HTML. Dans la base de données, l'un des champs est un texte qui peut contenir des balises HTML telles que <b> ou <i>, par exemple.Prévenir ou effacer les balises HTML/CSS

Mon problème est que dans une partie spécifique du site (une section de recherche), je veux afficher seulement un «résumé»/sous-chaîne de ce champ.

Le problème est le suivant: lorsque j'obtiens une partie de ce champ à afficher dans la page, les balises qui ne sont pas fermées influencent la façon dont le reste de la page est affiché.

Deux choses résoudrait ce problème:

  1. Empêcher ces balises spécifiques à afficher;
  2. Une fois le champ affiché, je souhaite fermer toutes les 'balises ouvertes'.

Notez que l'option numéro un serait beaucoup mieux.

Répondre

2

Vous pouvez utiliser strip_tags avant d'afficher le récapitulatif pour l'utilisateur.

+0

Il y a un énorme avertissement dans le manuel PHP: ** Attention ** Parce que strip_tags() ne valide pas réellement la Les balises HTML, partielles ou brisées peuvent entraîner la suppression de plus de texte/données que prévu. – stillstanding

+2

@stillstanding: oui, mais comme (1) le html ici est plus ou moins sous contrôle, et (2) nous n'allions jamais que donner un résumé, la perte de certaines données ne devrait pas poser trop de problème, s'adapter au besoin actuel. On ferait le 'strip_tags' _before_ a' substr' cependant. – Wrikken

0

Si la chaîne xhtml est compatible? Si c'est le cas, vous pouvez essayer de lancer votre propre fonction pour faire correspondre les balises et ajouter automatiquement des balises de fermeture à la fin.

Utilisez l'expression régulière pour rechercher toutes les balises d'ouverture et de fermeture dans la chaîne, puis faites défiler les étiquettes. S'il rencontre une balise d'ouverture (sans le "/"), poussez-le dans une pile. S'il rencontre une fermeture, placez le haut de la pile.

Lorsque toutes les étiquettes ont été manipulées, ce qui reste dans la pile doit être fermé. Il suffit de les enlever une à la fois et d'ajouter la fermeture à l'arrière de votre chaîne.

0

je le ferais de cette façon ::

fonction

pour obtenir la chaîne de DB sera de retour var $ return

$tag = strip_tags($return); // will remove tags if exist 

print '<p>'$tag'</p>; 
0

son facile à utiliser preg remplacer la fonction

$search = array(


    "'<script[^>]*?>.*?</script>'si", // strip out javascript 
        "'<[\/\!]*?[^<>]*?>'si",   // strip out html tags 
        "'([\r\n])[\s]+'",     // strip out white space 
        "'&(quot|#34|#034|#x22);'i",  // replace html entities 
        "'&(amp|#38|#038|#x26);'i",   // added hexadecimal values 
        "'&(lt|#60|#060|#x3c);'i", 
        "'&(gt|#62|#062|#x3e);'i", 
        "'&(nbsp|#160|#xa0);'i", 
        "'&(iexcl|#161);'i", 
        "'&(cent|#162);'i", 
        "'&(pound|#163);'i", 
        "'&(copy|#169);'i", 
        "'&(reg|#174);'i", 
        "'&(deg|#176);'i", 
        "'&(#39|#039|#x27);'", 
        "'&(euro|#8364);'i",    // europe 
        "'&a(uml|UML);'",     // german 
        "'&o(uml|UML);'", 
        "'&u(uml|UML);'", 
        "'&A(uml|UML);'", 
        "'&O(uml|UML);'", 
        "'&U(uml|UML);'", 
        "'&szlig;'i", 

        ); 
    $replace = array( 

                "", 
         "", 
         "\\1", 
         "\"", 
         "&", 
         "<", 
         ">", 
         " ", 
         chr(161), 
         chr(162), 
         chr(163), 
         chr(169), 
         chr(174), 
         chr(176), 
         chr(39), 
         chr(128), 
         "ä", 
         "ö", 
         "ü", 
         "Ä", 
         "Ö", 
         "Ü", 
         "ß", 

        ); 

    $text = preg_replace($search,$replace,$yourtextasstring); 
    echo $text; 

utilisez ceci et changez $ yourtextasstring à votre chaîne avec du texte html ou css

laisse dire code: $ yourtextasstring = "texte avec les balises html 1";

si vous mettez cela avant preg remplacer il vous montrera result = « 1 » sans étiquettes

Questions connexes