I believe strtr
is multi-byte safe, either way since str_replace
is multi-byte safe you could wrap it:
function mb_strtr($str, $from, $to)
{
return str_replace(mb_str_split($from), mb_str_split($to), $str);
}
Since there is no mb_str_split
function you also need to write your own (using mb_substr
and mb_strlen
), or you could just use the PHP UTF-8 implementation (changed slightly):
function mb_str_split($str) {
return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY);;
}
However if you're looking for a function to remove all (latin?) accentuations from a string you might find the following function useful:
function Unaccent($string)
{
return preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
echo Unaccent('??????yáí??ň?'); // llsctzyairdna
echo Unaccent('I?t?rnati?nàliz?ti?n'); // Internationalizaetion
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…