データベースの結果を返し、検索語に基づいてページに表示する場合があります。この部分は問題なく動作していますが、これらの検索用語を span タグで囲んで強調したいと思います。str_replace 関数を使用する結果ごとに呼び出す関数を書き始めましたが、これが HTML タグ内のテキストにも影響することに気付きました。これを効果的に行うために使用する機能を持っている人はいますか? PHP 4 を使用しています。ありがとうございます。
3 に答える
私はjavascriptでハイライトに行きます
$(document).ready(function(){
$('#your_results_list').removeHighlight().highlight('search_word');
}
このようにして、ソースを台無しにすることはありません。ユーザーは必要に応じてハイライトをオンにすることができます。
私はかつてPerlで検索を書いたことがあり、次のようにしました(PHPに少し翻訳しました):
// Split up the full page content in pieces without `<` and `>`
preg_match_all("/([^<>]+)/", $pageContent, $matches);
foreach ($matches as $val) {
// Just print the $val if it was between < and >
if (preg_match("/<$val>/", $pageContent) { print "<$val>"; }
else {
// Do the replace
print str_replace( "$searchString", "<span>$searchString</span>", $val);
}
}
次の場合は、正規表現の使用を避けることができます。
// Split up the full page content in pieces with `<`
$matches = split("<", $pageContent);
foreach ($matches as $val) {
// Just print the $val if it was between < and >
if (stristr($pageContent, "<$val")) { print "<$val"; }
else {
// Do the replace
print str_replace( "$searchString", "<span>$searchString</span>", $val);
}
}
テストはしていませんが、このようなものにする必要があります。
結果を返して表示する場合、生データが html で大量に生成される前にアクセスできるべきではありませんか? その場合は、そこにスパンタグを追加して、生データを変更してください。
生データにすでにhtml が含まれている可能性があると言っている場合は、正規表現を使用して html タグ内にあるかどうかを検出し、str_replace の代わりに preg_replace を使用できる場合があります。
その他のオプション:
-- 結果を dom パーサーにロードし、リーフ テキスト ノードでのみ置換操作を行います。
-- 独自のパーサーを作成して、html タグ内にいるかどうかを追跡します
-- 結果からすべての HTML タグを取り出し、" [[[tag1]]] balha blah blah [[[tag2]]]" のようなプレースホルダーを挿入し、残りのテキストを置換してから、元のタグに置き換えます。