P粉0685109912023-08-18 11:34:44
我想分享一个优雅的解决方案,避免使用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)
P粉4706452222023-08-18 10:51:27
只需将重音符号转换为它们的非重音对应部分,然后比较字符串。我答案中的函数将为您删除重音符号。
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));
输出:
bool(true)