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