PHP搜索函数返回HTML BR标记

PHP搜索函数返回HTML BR标记,php,mysql,Php,Mysql,我在我的网站上有一个搜索功能,可以搜索论坛上的帖子。使用MySQL SELECT语句执行搜索 SELECT * FROM my_table WHERE post_text LIKE '%$search_string%'; 匹配完成后,我返回找到的帖子,并突出显示原始帖子中的术语 function highlight_finds($search_text, $search_for){ $replacement_string = "<mark>".$search_for."&l

我在我的网站上有一个搜索功能,可以搜索论坛上的帖子。使用MySQL SELECT语句执行搜索

SELECT * 
FROM my_table
WHERE post_text LIKE '%$search_string%';
匹配完成后,我返回找到的帖子,并突出显示原始帖子中的术语

function highlight_finds($search_text, $search_for){
   $replacement_string = "<mark>".$search_for."</mark>";
   $replaced_text = str_ireplace($search_for, $replacement_string, $search_text);
   return $replaced_text;
}

echo highlight_finds(stripslashes($post_text), $search_string);
函数突出显示查找($search\u text,$search\u for){
$replacement_string=“”.$search_for。“”;
$replacement\u text=str\u ireplace($search\u for,$replacement\u string,$search\u text);
返回$U文本;
}
回显突出显示查找(条斜杠($post_文本),$search_字符串);
换行符在数据库表中用“br”表示

 line 1 <br /> <br /> line 2 <br /> <br /> line 3
第1行


第2行


当我在上面使用搜索词“br”运行highlight_finds函数时,将返回以下HTML

line 1 <<mark>br</mark> /><<mark>br</mark> />line 2 
<<mark>br</mark> /><<mark>br</mark> />line 3
第1行第2行
第3行
标记标记放置在br标记周围,任何带有换行符的帖子都会在结果中返回,并与br标记一起显示


在搜索术语“br”、“b”或“r”时,防止返回换行标记的最佳方法是什么?

在搜索时,您必须
去除\u标记
,并尝试使用mysql自定义功能

CREATE FUNCTION strip_tags( x longtext) RETURNS longtext
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE sstart INT UNSIGNED;
DECLARE ends INT UNSIGNED;
SET sstart = LOCATE('<', x, 1);
REPEAT
SET ends = LOCATE('>', x, sstart);
SET x = CONCAT(SUBSTRING( x, 1 ,sstart -1) ,SUBSTRING(x, ends +1 )) ;
SET sstart = LOCATE('<', x, 1);
UNTIL sstart < 1 END REPEAT;
return x;
END;

SELECT * 
FROM my_table
WHERE strip_tags(post_text) LIKE '%$search_string%';


您可以通过在数据库中不使用HTML来实现这一点,这是一个糟糕的做法。您必须使用php筛选结果,或者必须在现有结果之外存储数据库条目,而不使用HTML标记。您可以尝试在其中定义搜索时忽略的停止词。它也比像“%search%”这样的
快得多。
@MadaraUchiha让我休息一下,每个CMS或博客的数据库中都有HTML。“坏习惯”真的吗?“为什么?”MadaraUchiha说,“真正的男人,事情就是这样。降价是“关系数据”吗?堆栈溢出或易趣呢?你认为他们不会把我们的HTML保存在数据库里吗?
function highlight_finds($search_text, $search_for){
   $replacement_string = "<mark>".$search_for."</mark>";
   $replaced_text = str_ireplace($search_for, $replacement_string, strip_tags($search_text));
   return $replaced_text;
}