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

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

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

Теперь слово запроса может быть чем-то вроде «jos». И с этим я хочу "Хосе" или & quot; JOS & # xC9; & quot; или & quot; Jos & # xE9; & quot; и т. д. выделены тоже.

С этим выражением, если я напишу "jos" ## ";", оно будет соответствовать "jos & # xE9;" и & quot; JOS & # xC9; & quot; (и все варианты кейсов). Он всегда соответствует только акцентированным вариантам. Если я ищу «jose», это соответствует «JOSE», «jose», «Jose» но не акцентированные. Таким образом, я частично хочу то, что хочу, потому что у меня регистр не учитывается отдельно и без ударения.

Мне нужно, чтобы он был полностью объединен, что означает нечувствительность к акценту (юникоду), поэтому я могу искать "jose" и выделять "jos" # "," jos & # xC9; "," Jos "#" ;, "JOSE", "JOS" & # xC9; "," JoS & # xE9; ", ...

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

Есть идеи?

Спасибо!

Ответы на вопрос(2)

Решение Вопроса

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

 Lightworker01 июн. 2012 г., 17:13
Awsome! Я думал, что для этого потребуется много памяти, но это работает очень быстро, и это действительно хороший подход, так как это не PHP, что мне нужно было сделать. Работает удивительный человек! Вы сделали мой день! Не могли бы вы немного расширить его с помощью символов, которые, по вашему мнению, могут быть интересны для этой функции, пожалуйста? Спасибо!

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

Ваш ответ на вопрос