我試圖編寫一個搜索功能,突出搜索結果中的查詢。目前,我正在使用此代碼$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