4

典型的なハイライトコードをやりたいです。だから私は次のようなものを持っています:

$valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>\\1</span>", $valor);

さて、リクエストワードは「josé」のようなものになります。それに合わせて、「ホセ」「ホセ」「ホセ」などもハイライトしてほしいです。

この表現で「josé」と書くと、「josé」と「JOSÉ」(およびすべての大文字小文字の変形)に一致します。常にアクセント付きのバリアントのみに一致します。「jose」を検索すると、「JOSE」、「jose」、「Jose」と一致しますが、アクセント付きのものとは一致しません。アクセント付きとアクセントなしを別々に大文字と小文字を区別しないため、部分的に必要なものがあります。

完全に組み合わせる必要があります。これはアクセント(ユニコード)に依存しないことを意味するため、「jose」を検索して、「josé」、「josÉ」、「José」、「JOSE」、「JOSÉ」、「JoSé」などを強調表示できます。 。

単語のアクセントを置き換えたくないので、画面に印刷するときに、実際の単語が表示されるのを確認する必要があります。

何か案は?

ありがとう!

4

2 に答える 2

10

txt_searchに基づいて正規表現を作成する関数を作成し、可能な一致を次のようにすべての可能な一致に置き換えることができます。

function search_term($txt_search) {
    $search = preg_quote($txt_search);

    $search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search);
    $search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search);
    $search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search);
    $search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search);
    $search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search);
    // add any other character

    return $search;
}

次に、結果をpreg_replaceの正規表現として使用します。

于 2012-05-31T16:32:14.397 に答える
1

[eéÉ]のようなケースが含まれるように、検索文字列を解析し、正規表現のパターンを変更する必要がある場合があります。e /E/é/Éのすべてのインスタンスをキャッチオール[eEéÉ]に置き換えます。他のすべての場合も同じようにします。したがって、あなたの例では、Jose/José/JOSÉの代わりに検索パターンは次のようになります。jos[éÉeE]

于 2012-05-31T16:37:09.867 に答える