Php mysql内置的剥离标签的功能

Php mysql内置的剥离标签的功能,php,mysql,symfony1,Php,Mysql,Symfony1,我的代码中有以下sql查询: SELECT ANSWER FROM FAQ WHERE (ANSWER LIKE '%".$searchKey."%') Where-ANSWER可能还包含html和style标记,这使得上述查询无法通过纯文本匹配检索任何内容。我使用的是symfony1.1,上面的查询位于faq.php文件中 那么,有人能建议我如何克服这个问题吗?我最初说: "SELECT `answer` FROM `faq` WHERE (`answer` LIKE '%".strip_t

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

SELECT ANSWER FROM FAQ WHERE (ANSWER LIKE '%".$searchKey."%')
Where-ANSWER可能还包含html和style标记,这使得上述查询无法通过纯文本匹配检索任何内容。我使用的是symfony1.1,上面的查询位于
faq.php
文件中

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

我最初说:

"SELECT `answer` FROM `faq` WHERE (`answer` LIKE '%".strip_tags($searchKey)."%'")
但现在,这是由于评论而添加的内容

那为什么不这样做呢

$query = mysql_query("SELECT `answer` FROM `faq` WHERE (`answer` LIKE '%$searchKey%'");
while ($result = mysql_fetch_object($query)) {
    $newStrippedItem = strip_tags($result->columnItemName);
}

您需要做的是使用
PHP
函数
htmlentities(answer)
。 它将
HTML
标记显示为纯文本

希望有帮助


Bram

没有现成的功能。虽然答案可以写出来,但编写一个“简化”版本的答案并在上面进行全文匹配会更有效。毕竟,搜索将在带标签的ANSWER版本上进行:无论是由mysql带标签函数生成还是存储在ANSWER简单列中,逻辑都是一样的

在搜索时,您可以去除标签、删除干扰词和小写SearchQuery,然后在ANSWER_SIMPLE中查找SimplifiedSearchQuery。您还可以执行其他技巧,例如在存储之前将所有单词转换为Soundex形式,以及搜索(可选?)以查找“相似性”


另一种可能是将SearchQuery分块成单个单词,然后分别搜索它们。因此,如果HTMLised答案不匹配,因为您有,比如说,“但是{em}我{/em}是您的{em}女王{/em}!”,其中搜索查询“您的女王”将找不到,您可以同时搜索您的“女王”和“女王”。这将导致误报,但允许您使用当前数据库,而无需求助于剥离的辅助列或表。

我知道这很旧,但我认为您可以通过在mysql上创建此函数来解决问题:

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 ;

对不起,没有这样的功能。保存一份
答案的纯文本副本如何?是否考虑过更新?Symfony 1.1现在已经3年不受支持了(至少最新的安全更新“仅”2年:D)!不要说你应该使用symfony2,但至少1.3或1.4应该让你睡得更好:D@KingCrunchsf1.1仍然使用旧的表单系统,迁移到sf1.3/4可能是一场噩梦。但我同意你的看法。@j0k我知道你的意思,但迁移表单可能是一场噩梦,但受损的系统将是一场噩梦;)在我看来,时不时的更新是没有办法的。就我自己而言,我更喜欢持续的更新,这会让噩梦变得很小(但可能它们更经常出现)^^^嗨,Piskvor,保留一份答案的痛苦文本副本在以后编辑它时不会很好,因为它会松开用户给出的所有样式标签,并让他们有点烦恼,不是吗?嗨,我知道你的想法,但$searchKey本身就是一个纯文本。我想做脱衣舞标签(答案)。。!您应该在将数据返回到应用程序后再执行此操作。因此,一旦将记录集设置为$result,就可以将所有逻辑应用于所需的每个项。我将修改我的答案以表明我的意思。
SELECT plain_text(ANSWER) as plain_t FROM FAQ HAVING (plain_t LIKE '%".$searchKey."%')