0

キーワードを強調表示するこの機能があります。うまく機能しますが、一重引用符と二重引用符では機能しないようです。

function highlight($input, $keywords) {

    // Hello Mr Regex
    preg_match_all('~\w+~', $keywords, $match);

    // If there's no match
    if(!$match) { return $input; }

    // Case sensitive search
    //$result = '~\\b(' . implode('|', $match[0]) . ')\\b~';

    // Case insenstive search
    $result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';

    // Return highlighted text
    return preg_replace($result, '<strong>$0</strong>', $input);

}

$keywords = "just another what's little's test";

$input = "here what what's just looking little's another's this's for another one that requires a test";


結果:ここにあるのは少ししか見えないものですこれは別のものですテストが必要な別のものです


この例では、これのを強調表示するべきではありません。


入力とキーワードの両方にも使用htmlspecialchars()してみましたが、これも一致していないようです。

何か案は?

4

1 に答える 1

2

\w文字、数字、およびアンダースコアのみです。引用符またはアポストロフィを含める場合は、文字クラスを作成できます。

preg_match_all('~[\w\'"]+~' ...
于 2013-03-16T19:16:27.573 に答える