4

我想做典型的高亮代码。所以我有类似的东西:

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

现在,请求词可能类似于“josé”。有了它,我也想突出显示“jose”或“JOSÉ”或“José”等。

使用这个表达式,如果我写“josé”,它会匹配“josé”和“JOSÉ”(以及所有大小写变体)。它始终只匹配重音变体。如果我搜索“jose”,它匹配“JOSE”、“jose”、“Jose”,但不匹配重音的。所以我有部分我想要的,因为我对重音和非重音分别不区分大小写。

我需要它完全结合,这意味着重音(unicode)不敏感,所以我可以搜索“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

您可能必须解析搜索字符串,并修改正则表达式中的模式,以便 if 包含 [eéÉ] 之类的情况。将 e/E/é/É 的所有实例替换为一个包罗万象的 [eEéÉ]。对所有其他情况执行相同的操作。所以在你的例子中,搜索模式,而不是 Jose/José/JOSÉ,将是jos[éÉeE]

于 2012-05-31T16:37:09.867 回答