0

LONGTEXT私はmysqlに保存された列を持っています。このテキストはリッチ テキストを保存します。私は現在、すべてのテキストを読んで100から、単語を途中で分割しないように最初の文字を取得するためにjavascriptを使用して修正しています。

しかし、この方法は最善の方法とは思えません。クエリを使用して直接要約を選択したいのですが、html タグである文字を含めないように注意したいです。

以下の関数は、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 ; 
4

1 に答える 1

0

解決策の一部は、テキストを削除した使用を選択することです

これは、php関数strip_tagsのようなmysql関数です。

 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?

したがって、 substring +strip_tagsを使用する必要があります

于 2010-08-31T11:56:09.973 に答える