I считаю, 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
и 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