私は検索結果をハイライト表示する検索機能をプログラムしようとしています。現時点では、このコード$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. PHPのexecコマンドと特殊文字のエスケープ
- 2. sedのxpathの特殊文字をエスケープ
- 3. SQLでの特殊文字のエスケープ
- 4. 特殊HTML文字
- 5. ルビーの特殊文字をエスケープする
- 6. elasticsearchクエリのエスケープ特殊文字
- 7. sys argvのPythonエスケープ特殊文字
- 8. xmlのJavascriptエスケープ特殊文字
- 9. PHP - 特殊文字
- 10. PHP特殊文字
- 11. 特殊文字のphp
- 12. JavaScriptでHTML特殊文字をエスケープする方法
- 13. to_tsqueryで特殊文字をエスケープする
- 14. 可能なlineinfileエスケープ特殊文字
- 15. Rubyで特殊文字をエスケープする
- 16. 特殊文字をエスケープする方法
- 17. JiBX(Un)マーシャルで特殊文字をエスケープ
- 18. elasticsearchで特殊文字をエスケープする
- 19. phpとhtmlの特殊文字解析の問題
- 20. Postgresが特殊文字をエスケープするPHP
- 21. PHPメールスクリプトの改行と特殊文字
- 22. htmlエンティティ/特殊文字デコード
- 23. 特殊文字をCodenameの1文字列でエスケープする
- 24. System.Xml.XmlDocument.OuterXmlのSQL 2005 XML特殊文字/エスケープ文字
- 25. PHPのldap_add関数がDN構文のldap特殊文字をエスケープする
- 26. PHP:特殊文字に
- 27. PHP JSON特殊文字
- 28. PHPファイル_get_contents特殊文字
- 29. PHP str_replace特殊文字
- 30. 文字列から特殊文字をエスケープする方法
'$ query'と' $ text'の両方を 'htmlspecialchars()'で実行するだけで何が問題になりますか? –
@PatrickQもし 't'を検索すると、'> 'はHTMLコードになります。この' > 'と' t'はHTMLコードだけ 't'です。 '>'のHTMLコード内のtも強調表示され、HTMLコードがプレーンテキストとして表示されます。 – DreiDe