Domanda

Ho una colonna salvato LONGTEXT su MySQL. Questo testo consente di risparmiare rich text. Attualmente sto leggendo tutto il testo successivo fissaggio utilizzando JavaScript per ottenere i primi caratteri 100 in modo da non dividere la parola nel suo mezzo.

Ma in questo modo non mi sembra il modo migliore per farlo. Voglio selezionare una sintesi direttamente utilizzando la query, ma voglio anche fare attenzione a non includere i caratteri che sono HTML tags.

La funzione qui sotto sembra funzionare bene a striscia la 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 ; 
È stato utile?

Soluzione

parte della soluzione è quella di selezionare il testo uso spogliato

Questo è il mysql funzione come php strip_tags funzione

 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?

quindi è necessario utilizzare sottostringa + strip_tags

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top