我(例如)有两个字符串:
$a = "joao";
$b = "joão";
if ( strtoupper($a) == strtoupper($b)) {
echo $b;
}我希望这是真实的,即使是强调。然而,我需要它忽略重音,而不是替换,因为我需要它回应“若昂”而不是“若昂”。
我看到的所有答案都以"a“代替,而不是使比较成为现实。我一直在读关于正常化的文章,但我也不能让它正常工作。有什么想法吗?谢谢。
发布于 2014-12-28 21:15:48
只需将重音转换为它们的非重音计数器部分,然后比较字符串。我的答案中的函数会帮你去掉重音。
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'))), ' '));
}
$a = "joaoaaeeA";
$b = "joãoâàéèÀ";
var_dump(removeAccents($a) === removeAccents($b));输出:
bool(true)发布于 2021-05-04 09:04:23
我想分享一个优雅的解决方案,它可以避免使用that实体,并且不需要手动列出所有字符替换。它是这 post的答案在php中的转换。
function removeAccents($str) {
return preg_replace('/[\x{0300}-\x{036f}]/u',"",normalizer_normalize($str,Normalizer::FORM_D));
}
$a = "joaoaaeeA";
$b = "joãoâàéèÀ";
var_dump(removeAccents($a) === removeAccents($b));输出:
bool(true)发布于 2016-11-12 12:48:59
它不是一个普通的PHP解决方案,但是在这种情况下工作得很好,在MySQL上运行这个查询:
SELECT 'joão' = 'joao'因此,如果您可以访问mysql,就可以通过PHP使用它。
https://stackoverflow.com/questions/27680624
复制相似问题