Я получил (например) две строки:
$a = "joao";
$b = "joão";
if ( strtoupper($a) == strtoupper($b)) {
echo $b;
}
Я хочу, чтобы это было правдой даже до акцентуации. Однако мне нужно, чтобы он игнорировал акцентуацию, а не заменял, потому что мне нужно, чтобы он повторял «joão», а не «joao».
Все ответы, которые я видел, заменяют «ã» на «a» вместо того, чтобы сравнивать. Я читал о нормализации этого, но я не могу заставить это работать также. Есть идеи? Спасибо.
Просто преобразуйте акценты в их не акцентированную встречную часть, а затем сравните строки. Функция в моем ответе уберет для вас акценты.
function removeAccents($string) {
return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'))), ' '));
}
if (removeAccents($a) == removeAccents($b)) {
echo $b;
}
Это не простое решение PHP, но оно очень хорошо подходит для этой ситуации, запустите этот запрос на MySQL:
SELECT 'joão' = 'joao'
Так что если у вас есть доступ к MySQL, вы можете использовать его из PHP.