PHP:在一个UTF-8字符串替换最接近的7位ASCII相当于变音PHP:在一个UTF-8字符串替换

2019-05-06 16:12发布

我想要做的是从一个字符串中删除所有的重音和变音符号,把“LARM”到“LARM”或“安德烈”变成了“安德烈”。 我试图做的是utf8_decode的字符串,然后就可以使用strtr函数的效率,但因为我的源文件保存为UTF-8的文件,我不能进入所有变音符号的ISO-8859-15字符 - 编辑器插入UTF-8字符。

显然,一个解决方案将有一个包括这是一个ISO-8859-15文件,但必须有比有其他要求包括更好的办法?

echo strtr(utf8_decode($input), 
           'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ',
           'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');

更新:也许我是有点不准确的什么我尝试做的事:我实际上并不想删除的变音,但他们与最近的“一个ASCII字符”等价替换。

Answer 1:

iconv("utf-8","ascii//TRANSLIT",$input);

扩展的例子



Answer 2:

一个小技巧,不需要设置地区或有巨大的转换表:

function Unaccent($string)
{
    if (strpos($string = htmlentities($string, ENT_QUOTES, 'UTF-8'), '&') !== false)
    {
        $string = html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $string), ENT_QUOTES, 'UTF-8');
    }

    return $string;
}

它正常工作的唯一要求是保存在UTF-8的文件(如你应该已经)。



Answer 3:

你也可以试试这个

$string = "Fóø Bår";
$transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
echo $normalized = $transliterator->transliterate($string);

但你需要有http://php.net/manual/en/book.intl.php可用



Answer 4:

好了,找到了一个显而易见的解决方法我自己,但它不是最好的关于性能...

echo strtr(utf8_decode($input), 
           utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
           'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');


Answer 5:

对于阿拉伯语和波斯语的用户我建议这种方式来删除变音符号:

    $diacritics = array('َ','ِ','ً','ٌ','ٍ','ّ','ْ','ـ');
    $search_txt = str_replace($diacritics, '', $diacritics);

为阿拉伯语的键盘键入附加符号u可以使用此子囊(那些码是子囊不是Unicode)在窗口编辑打字附加符号直接或保持ALT +(音调符号型字符的代码)码这是代码

(0243)(0246)(0245)(0240)(0242)(0241)(0250)(0248)(0220)



Answer 6:

我发现,这一个给出了法语和德语的最一致的结果。 设置为meta标签utf-8我已经将其放入一个函数从字的排列返回线和它的作品完美。

htmlentities (  $line, ENT_SUBSTITUTE   , 'utf-8' ) 


Answer 7:

如果您在使用WordPress,你可以使用内置的功能remove_accents( $string )

https://codex.wordpress.org/Function_Reference/remove_accents

但是我注意到了一个错误:它不会在一根绳子上的单一角色工作。



文章来源: PHP: Replace umlauts with closest 7-bit ASCII equivalent in an UTF-8 string