84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我得到了(例如)两个字符串:
$a = "joao"; $b = "joão"; if ( strtoupper($a) == strtoupper($b)) { echo $b; }
我希望即使有重音,它也能为真。然而,我需要它忽略重音而不是替换,因为我需要输出"joão"而不是"joao"。
我看到的所有答案都是将"ã"替换为"a",而不是使比较为真。我一直在阅读有关规范化的内容,但我也无法使其工作。有什么想法吗?谢谢。
我想分享一个优雅的解决方案,避免使用htmlentities,并且不需要手动列出所有字符替换。这是对这个帖子的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)
只需将重音符号转换为它们的非重音对应部分,然后比较字符串。我答案中的函数将为您删除重音符号。
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', '', htmlentities($string, ENT_QUOTES, 'UTF-8'))), ' ')); } $a = "joaoaaeeA"; $b = "joãoâàéèÀ"; var_dump(removeAccents($a) === removeAccents($b));
演示
我想分享一个优雅的解决方案,避免使用htmlentities,并且不需要手动列出所有字符替换。这是对这个帖子的php翻译。
输出:
只需将重音符号转换为它们的非重音对应部分,然后比较字符串。我答案中的函数将为您删除重音符号。
输出:
演示