Maison >base de données >tutoriel mysql >Comment rechercher avec précision les colonnes MySQL contenant des balises HTML ?

Comment rechercher avec précision les colonnes MySQL contenant des balises HTML ?

DDD
DDDoriginal
2024-12-14 10:05:10166parcourir

How to Accurately Search MySQL Columns Containing HTML Tags?

Supprimer les balises HTML d'un enregistrement

Vous avez peut-être rencontré une situation dans laquelle vous devez rechercher un mot-clé spécifique dans une colonne contenant Balises HTML. Cependant, vous remarquerez peut-être que votre requête renvoie des résultats incorrects en raison de la présence de ces balises. Explorons comment modifier votre requête MySQL pour filtrer avec précision les enregistrements en fonction de leur contenu tout en excluant les balises HTML.

Dans l'exemple fourni, la requête SELECT * from table WHERE colmn_name LIKE '%mytext%' récupérera les quatre lignes, même si seule la ligne 3 contient le mot-clé "mytext" dans son contenu. Pour surmonter ce défi, envisagez la solution suivante proposée par un membre du forum MySQL :

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
  DECLARE iStart, iEnd, iLength int;
  WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
    BEGIN
      SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
      SET iLength = ( iEnd - iStart) + 1;
      IF iLength > 0 THEN
        BEGIN
          SET Dirty = Insert( Dirty, iStart, iLength, '');
        END;
      END IF;
    END;
  END WHILE;
  RETURN Dirty;
END;
|
DELIMITER ;
SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');

Cette solution implique la création d'une fonction définie par l'utilisateur (UDF) nommée fnStripTags qui accepte une chaîne sale contenant des balises HTML. La fonction parcourt la chaîne, localisant les balises d'ouverture (<) et de fermeture (>). Il calcule la longueur de la balise et la supprime de la chaîne pour produire une chaîne propre sans éléments HTML.

Pour utiliser cet UDF, vous pouvez l'incorporer dans votre requête d'origine comme suit :

SELECT * FROM table WHERE fnStripTags(column_name) LIKE '%mytext%';

En utilisant cet UDF, votre requête exclura les balises HTML de la recherche, garantissant ainsi que vous récupérez uniquement les lignes où le mot-clé « montexte » apparaît dans le contenu réel. Cette approche vous permet d'effectuer un filtrage des données plus précis et d'éviter toute interférence du balisage HTML.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn