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)