PHP-REGEX: акцентированные буквы соответствуют неактивным, и наоборот. Как достичь этого?

Я хочу сделать типичный код выделения. Поэтому у меня есть что-то вроде:

$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É» (и все варианты case). Он всегда соответствует только акцентированным вариантам. Если я ищу «jose», он соответствует «JOSE», «jose», «Jose», но не акцентированным. Поэтому я частично хочу, потому что у меня нет чувствительности к акценту и без акцента отдельно.

Мне нужно, чтобы он был полностью объединен, что означает, что акцент (unicode) нечувствителен, поэтому я могу искать «jose» и выделять «josé», «josÉ», «José», «JOSE», «JOSÉ», «JoSé», .. ,

Я не хочу делать замену акцентов на этом слове, потому что, когда я печатаю его на экране, мне нужно увидеть настоящее слово, как оно есть.

Есть идеи?

Благодаря!

Вы можете попытаться создать функцию для создания выражения регулярного выражения на основе 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.

Возможно, вам придется проанализировать строку поиска и изменить шаблон в регулярном выражении, чтобы включить в него такие случаи, как [eéÉ]. Замените все экземпляры e / E / é / É всеми доступными [eEéÉ]. Сделайте то же самое для всех других случаев. Таким образом, в вашем примере шаблон поиска вместо Jose / José / JOSÉ будет jos[éÉeE]