我试图编写一个搜索功能,突出搜索结果中的查询。目前,我正在使用此代码$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. 显示所有特殊字符html/php
- 2. 在phpMyAdmin查询转义特殊字符
- 3. Ormlite像查询特殊字符转义
- 4. xml和html转义特殊字符
- 5. 特殊字符转义和HTML在Drupal
- 6. HTML特殊字符和PHP
- 7. PHP显示特殊字符
- 8. PHP转换html特殊字符,如口音显示正确
- 9. 突出显示在特殊字符中的搜索结果中的查询
- 10. .Net Regex突出显示包含特殊字符的关键字
- 11. PHP&MySQL - HTML净化器和特殊字符显示问题
- 12. 如何显示HTML特殊字符
- 13. HTML特殊字符显示不正确
- 14. 无法显示特殊字符HTML
- 15. Postgres转义特殊字符PHP
- 16. php mysql特殊字符转义
- 17. UIWebView JavaScript Highlight - 如何突出显示特殊字符? (utf8编码?)
- 18. Watir:转义特殊字符
- 19. C++ - 转义特殊字符
- 20. XML转义特殊字符
- 21. 转义特殊字符
- 22. 转义特殊字符
- 23. 转义特殊字符
- 24. elasticseach特殊字符转义
- 25. JSTL转义特殊字符
- 26. python转义特殊字符
- 27. Javascript特殊转义字符
- 28. 转义特殊字符
- 29. 解析特殊字符并转换为HTML(转义字符串)
- 30. 特殊字符“'”显示不正确PHP?
刚才通过'htmlspecialchars()'运行'$ query'和'$ text'有什么问题? –
@PatrickQ如果我举个例子来搜索't',我得到了一个错误的结果,因为'>'是HTML代码,这个'>'和't'代码只是't'的HTML代码。所以'''HTML代码中的t也会被高亮显示,并且HTML代码将以纯文本显示。 – DreiDe