multibyte strtr() - > mb_strtr()

Mar*_*tin 13 php string multibyte

有没有人写过函数strtr()的多字节变体?我需要这个.

编辑1(所需用法的示例):

Example:
$from = '??š??žýáí???äô'; // these chars are in UTF-8
$to   = 'llsctzyai?dnao';

// input - in UTF-8
$str  = 'K?de? ?at?ov u?í ko?a žra? kôru.';
$str  = mb_strtr( $str, $from, $to );

// output - str without diacritic
// $str = 'Krdel datlov uci kona zrat koru.';

Ali*_*xel 24

认为 strtr是多字节安全的,无论哪种方式,因为str_replace 多字节安全的,你可以把它包:

function mb_strtr($str, $from, $to)
{
  return str_replace(mb_str_split($from), mb_str_split($to), $str);
}
Run Code Online (Sandbox Code Playgroud)

由于没有mb_str_split功能,您还需要编写自己的(使用mb_substrmb_strlen),或者您可以使用PHP UTF-8实现(略有改动):

function mb_str_split($str) {
    return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY);;

}
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在寻找从字符串中删除所有(拉丁?)重音的功能,您可能会发现以下功能有用:

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
Run Code Online (Sandbox Code Playgroud)