Сравните две строки и игнорируйте (но не заменяйте) ударения. Переполнение стека

Я получил (например) две строки:

$a = "joao";
$b = "joão";

if ( strtoupper($a) == strtoupper($b)) {
echo $b;
}

Я хочу, чтобы это было правдой даже до акцентуации. Однако мне нужно, чтобы он игнорировал акцентуацию, а не заменял, потому что мне нужно, чтобы он повторял «joão», а не «joao».

Все ответы, которые я видел, заменяют «ã» на «a» вместо того, чтобы сравнивать. Я читал о нормализации этого, но я не могу заставить это работать также. Есть идеи? Спасибо.

5

Решение

Просто преобразуйте акценты в их не акцентированную встречную часть, а затем сравните строки. Функция в моем ответе уберет для вас акценты.

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;
}

демонстрация

13

Другие решения

Это не простое решение PHP, но оно очень хорошо подходит для этой ситуации, запустите этот запрос на MySQL:

SELECT 'joão' = 'joao'

Так что если у вас есть доступ к MySQL, вы можете использовать его из PHP.

0

По вопросам рекламы [email protected]