我相信 strtr
是多字节安全的,无论哪种方式,因为str_replace
多字节安全,你可以包装它:
function mb_strtr($str, $from, $to)
{
return str_replace(mb_str_split($from), mb_str_split($to), $str);
}
由于没有mb_str_split
函数,您还需要编写自己的函数(使用mb_substr
and mb_strlen
),或者您可以只使用PHP UTF-8实现(稍作更改):
function mb_str_split($str) {
return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY);;
}
但是,如果您正在寻找一个从字符串中删除所有(拉丁语?)重音的函数,您可能会发现以下函数很有用:
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('ľľščťžýáíŕďňä'); // llsctzyairdna
echo Unaccent('Iñtërnâtiônàlizætiøn'); // Internationalizaetion