Question

J'ai une colonne enregistrée en tant LONGTEXT sur MySQL. Ce texte permet d'économiser du texte riche. Je lis actuellement tout le texte puis fixer en utilisant javascript pour obtenir les premiers caractères 100 de manière à ne pas diviser le mot en son milieu.

Pourtant, cette façon ne semble pas la meilleure façon de le faire. Je veux sélectionner un résumé en utilisant directement la requête, mais je veux aussi faire attention de ne pas inclure les caractères qui sont des balises HTML.

La fonction ci-dessous semble fonctionner très bien pour dépouiller les html.

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 ; 
Était-ce utile?

La solution

une partie de la solution consiste à sélectionner l'utilisation dépouillée de texte

Ceci est mysql fonction php comme strip_tags de fonction

 DROP FUNCTION IF EXISTS htmlStrip;
CREATE FUNCTION htmlStrip(pmXml longtext)RETURNS longtext
DETERMINISTIC
htmlStrip:
BEGIN 
        DECLARE vStart INTEGER ;
    DECLARE vEnd INTEGER ;
    DECLARE vResult LONGTEXT;
    DECLARE vCount1 INTEGER;
    DECLARE vCount2 INTEGER;

    SET vResult:=pmXml;
    SET vCount1:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'<',''));
    SET vCount2:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'>',''));
    IF vCount1<>vCount2 THEN 
              RETURN 'Input Error'; 
    END IF;

    WHILE (LOCATE('<',vResult) OR LOCATE('>',vResult)) DO
         SET vStart:=LOCATE('<',vResult);
         SET vEnd:=LOCATE('>',vResult);
         SET vResult:=REPLACE(vResult,SUBSTRING(vResult,vStart,vEnd-vStart+1),'');
    END WHILE;
    RETURN vResult;
END;

    SELECT htmlStrip('<html>hello<body> how r u?</body></html>') AS Result

Result
--------
hello how r u?

vous devez donc utiliser sous-chaîne + strip_tags

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top