PHP搜索文本突出显示功能
发布时间:2020-12-13 21:44:44 所属栏目:PHP教程 来源:网络整理
导读:我有一个 PHP突出显示功能,使某些单词变粗. 下面是函数,它很有用,除非数组:$words包含单个值:b 例如,有人搜索:jessie j price tag feat b o b 这将在数??组$words中包含以下条目:jessie,j,price,tag,feat,b,o,b 当’b’出现时,我的整个函数出错了,它显示
我有一个
PHP突出显示功能,使某些单词变粗.
下面是函数,它很有用,除非数组:$words包含单个值:b 例如,有人搜索:jessie j price tag feat b o b 这将在数??组$words中包含以下条目:jessie,j,price,tag,feat,b,o,b 当’b’出现时,我的整个函数出错了,它显示了一大堆错误的html标签.当然,我可以从数组中去掉任何’b’值,但这并不理想,因为突出显示不适用于某些查询. 此示例脚本: function highlightWords2($text,$words) { $text = ($text); foreach ($words as $word) { $word = preg_quote($word); $text = preg_replace("/b($word)b/i",'<b>$1</b>',$text); } return $text; } $string = 'jessie j price tag feat b o b'; $words = array('jessie','tag','b','o','b'); echo highlightWords2($string,$words); 将输出: <<<b>b</b>><b>b</b></<b>b</b>>>jessie</<<b>b</b>><b>b</b></<b>b</b>>> j price <<<b>b</b>><b>b</b></<b>b</b>>>tag</<<b>b</b>><b>b</b></<b>b</b>>> feat <<b>b</b>><b>b</b></<b>b</b>> <<b>b</b>>o</<b>b</b>> <<b>b</b>><b>b</b></<b>b</b>> 这只会发生,因为数组中有“b”. 你能看到我能改变的任何东西让它正常工作吗? 解决方法
你的问题是,当你的功能通过并查找所有b为粗体时,它会看到粗体标签,并尝试加粗它们.
@symcbean很接近但忘了一件事. $string = 'jessie j price tag feat b o b'; $words = array('jessie','b'); print hl($string,$words); function hl($inp,$words) { $replace=array_flip(array_flip($words)); // remove duplicates $pattern=array(); foreach ($replace as $k=>$fword) { $pattern[]='/b(' . $fword . ')(?!>)b/i'; $replace[$k]='<b>$1</b>'; } return preg_replace($pattern,$replace,$inp); } 你是否看到这个添加了“(?!>)”这是一个负面的前瞻断言,基本上它表示如果字符串后面没有“>”则匹配可以看到的是打开粗体和关闭粗体标签.注意我只检查“>”在字符串之后为了排除开始和结束粗体标记,因为在字符串的开头查找它不会捕获关闭粗体标记.上面的代码完全按预期工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |