我试图编写一个搜索功能,突出搜索结果中的查询。目前,我正在使用此代码$hightlight = preg_replace('/'.strtolower($query).'/', '<span class=hightlight>'.strtolower($query).'</span>', strtolower($text));
进行突出显示,这很好。我正在搜索的文本是来自数据库的字符串。现在的问题是,如果文本包含一些html特殊字符,例如<test>
和用户搜索<te
我得到以下结果:<span class="hightlight"><te< span="">st></te<></span>
这被解释为st>
。这是有道理的,但我不想要这个。我想<test>
作为<te
突出显示的结果。所以我需要逃避特殊字符。我知道有功能htmlspecialchars
,但是在这种情况下我该如何使用它?还是另一个功能?在搜索之前我无法逃避它们,因为我也在HTML代码中搜索。搜索后我也无法逃避它们,因为文本中的<span>
标签并且它们也将被转换为HTML代码。我希望你能理解我的问题。有没有人为此提供解决方案?PHP突出显示查询和转义html特殊字符
-1
A
回答
0
结合使用htmlspecialchars()
和正则表达式的负向预测,我认为我们能够解决这个问题。
<php
$text = "this is just my really basic <test> of words";
$query = "<te";
$text = htmlspecialchars($text);
$query = htmlspecialchars($query);
$highlight = preg_replace('/'.strtolower($query).'(?![^\&]*\;)/', '<span class=highlight>'.strtolower($query).'</span>', strtolower($text));
echo $highlight;
?>
(小纸条,我把改变的自由hightlight
到highlight
)
这可以解决您的评论中提到的问题的部分是负前瞻:(?![^\&]*\;)
这基本上意味着不在&
和;
之间的任何东西。现在
,这可能会明显一些边缘情况下&
和;
是实际文本的两个一部分碰到的问题。如果您没有做任何形式的文字查询限制/卫生设施,我不确定是否有任何适用于所有可能的情况。
+0
感谢您的回答帕特里克,这绝对比我的解决方案更好,解决了我的问题。但是正如你所提到的那样,当'&'和';'都在查询中时都有错误。所以答案仍然不完美。如果有人有更好的解决方案(如果可能的话),请在这里发布。 – DreiDe
相关问题
- 1. Ormlite像查询特殊字符转义
- 2. xml和html转义特殊字符
- 3. PHP显示特殊字符
- 4. PHP&MySQL - HTML净化器和特殊字符显示问题
- 5. HTML特殊字符显示不正确
- 6. Postgres转义特殊字符PHP
- 7. php mysql特殊字符转义
- 8. python转义特殊字符
- 9. C++ - 转义特殊字符
- 10. JSTL转义特殊字符
- 11. elasticseach特殊字符转义
- 12. 转义特殊字符
- 13. 转义特殊字符
- 14. 转义特殊字符
- 15. 解析特殊字符并转换为HTML(转义字符串)
- 16. PHP:特殊字符转换
- 17. mysql查询特殊字符
- 18. 查询的特殊字符
- 19. 显示特殊字符
- 20. 显示有特殊字符
- 21. SQL查询和特殊字符
- 22. 转义MDX查询中的特殊字符
- 23. 转义FMDB中的特殊字符iOS查询
- 24. 变音符号和特殊字符不显示在php mysql
- 25. HTML /纯文本的innerText和特殊字符转义序列dyamically
- 26. Lucene.NET查询+突出显示
- 27. PHP和特殊字符
- 28. php和特殊字符
- 29. PHP parse_str和特殊字符
- 30. PHP GeSHi突出显示大字符串
刚才通过'htmlspecialchars()'运行'$ query'和'$ text'有什么问题? –
@PatrickQ如果我举个例子来搜索't',我得到了一个错误的结果,因为'>'是HTML代码,这个'>'和't'代码只是't'的HTML代码。所以'''HTML代码中的t也会被高亮显示,并且HTML代码将以纯文本显示。 – DreiDe