首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql内置函数以剥离标记

mysql内置函数以剥离标记
EN

Stack Overflow用户
提问于 2012-07-24 10:45:08
回答 4查看 181关注 0票数 1

我的代码中有以下sql查询:

代码语言:javascript
运行
复制
SELECT ANSWER FROM FAQ WHERE (ANSWER LIKE '%".$searchKey."%')

其中,答案可能包含html &样式标记,这使得上面的查询在纯文本匹配的情况下不会检索任何内容。我使用的是Symfony 1.1,上面的查询位于faq.php文件中。

所以,有人能建议我如何克服这个问题吗?

EN

Stack Overflow用户

发布于 2013-04-18 11:28:30

嗯,我知道这很古老,但是,我认为您可以通过在mysql上创建这个函数来解决问题。

代码语言:javascript
运行
复制
DELIMITER |
DROP FUNCTION IF EXISTS plain_text |
CREATE FUNCTION plain_text( Dirty text )
RETURNS text
DETERMINISTIC 
BEGIN
  DECLARE iStart, iEnd, iLength int;
    WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
      BEGIN
        SET iStart = Locate( '<style>', Dirty ), iEnd = Locate( '</style>', Dirty);
        IF iEnd > 0 THEN
            BEGIN
                SET iLength = ( iEnd - iStart) + 12;
            END;
        ELSE
            BEGIN
                SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
                SET iLength = ( iEnd - iStart) + 1;
            END;
        END IF;
        IF iLength > 0 THEN
          BEGIN
            SET Dirty = Insert( Dirty, iStart, iLength, '');
          END;
        END IF;
      END;
    END WHILE;
    RETURN Dirty;
END;
|
DELIMITER ;

此函数移除所有html标记和<style></style>标记之间的所有内容。

然后,您可以这样执行查询:

代码语言:javascript
运行
复制
SELECT plain_text(ANSWER) as plain_t FROM FAQ HAVING (plain_t LIKE '%".$searchKey."%')
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11629188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档