将 cyril 更改为西方字符(均为 utf-8)- php

Change cyril to western characters (both in utf-8) - php

我对西里尔字符有疑问。我们的网站采用 utf-8 格式并接受这些字符,但是我们传递字符的外部来源不接受它们。我们正在尝试传递人名。他们有其他不同的字符集(例如 iso-8859-1)。

在 PHP 中是否有任何简单的方法可以在 utf-8 中首先手动将每个西里尔字符转换为等效的西方字符以避免不正确的转换?如果直接使用转换方法,则全部打上问号。

我找到了解决我的问题的方法。下面的函数将每个字符从西里尔字母转换为其等效的西方字符。使用此函数可以非常准确地转换名称。

当替换字符时,我可以使用 utf8_decode() 将其转换为 iso-8859-1。

function do_translit($st) {
    $replacement = array(
        "й"=>"i","ц"=>"c","у"=>"u","к"=>"k","е"=>"e","н"=>"n",
        "г"=>"g","ш"=>"sh","щ"=>"sh","з"=>"z","х"=>"x","ъ"=>"\'",
        "ф"=>"f","ы"=>"i","в"=>"v","а"=>"a","п"=>"p","р"=>"r",
        "о"=>"o","л"=>"l","д"=>"d","ж"=>"zh","э"=>"ie","ё"=>"e",
        "я"=>"ya","ч"=>"ch","с"=>"c","м"=>"m","и"=>"i","т"=>"t",
        "ь"=>"\'","б"=>"b","ю"=>"yu",
        "Й"=>"I","Ц"=>"C","У"=>"U","К"=>"K","Е"=>"E","Н"=>"N",
        "Г"=>"G","Ш"=>"SH","Щ"=>"SH","З"=>"Z","Х"=>"X","Ъ"=>"\'",
        "Ф"=>"F","Ы"=>"I","В"=>"V","А"=>"A","П"=>"P","Р"=>"R",
        "О"=>"O","Л"=>"L","Д"=>"D","Ж"=>"ZH","Э"=>"IE","Ё"=>"E",
        "Я"=>"YA","Ч"=>"CH","С"=>"C","М"=>"M","И"=>"I","Т"=>"T",
        "Ь"=>"\'","Б"=>"B","Ю"=>"YU",
    );

    foreach($replacement as $i=>$u) {
        $st = mb_eregi_replace($i,$u,$st);
    }
    return $st;
    } 

参考:http://php.net/manual/en/function.mb-eregi-replace.php