2

私はすべての単語の一致を強調しようとします

例: 入力のđã場合、すべての単語が強調表示されますđã đà Đà Đã

しかし、唯一đãのハイライトです。

ここに画像の説明を入力

ここに私の完全なコードがあります

<?php
header( 'Content-Type: text/html; charset=UTF-8' );

function highlightWords($text, $words) {
    $text = preg_replace("|($words)|Ui", "<span class=\"highlight_word\">$1</span>", $text);
    return $text;
}
$string = 'đã đà Đà Đã';
$words = 'đã';
$string =  highlightWords($string, $words);
?>

<html>
<head>
<title>PHPRO Highlight Search Words</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
.highlight_word{
        background-color: yellow;
}
</style>
</head>
<body>
 <?php echo $string; ?>
</body>
</html>

すべての単語 (utf-8) の一致を強調表示する方法 (例のように) ありがとう。

4

1 に答える 1

2

最初の強調表示のみが表示される理由は、U(PCRE_UNGREEDY) 修飾子を使用しているためです。これが混乱の原因だと思います。uパターン文字列を として扱う (PCRE_UTF8) 修飾子を使用するつもりだったと思いますUTF-8。詳細については、さまざまな「パターン修飾子」を参照してください。

次のように関数で使用u (PCRE_UTF8)してみてください。preg_replaceすべての単語が強調表示されているはずです。

function highlightWords($text, $words) {
    $text = preg_replace("|($words)|ui", "<span class=\"highlight_word\">$1</span>", $text);
    return $text;
}

これがこれのphpfiddleです。

于 2013-09-01T14:10:42.377 に答える