替换重音字符

时间:2012-10-02 19:39:38

标签: php character-encoding

我一直在阅读其他一些问题,但我仍然坚持将包含重音字符的字符串转换为普通字符的问题(我指的是a-z)

我的产品名称为“Áhkká”,已编码为"Áhkká"

我想将此解码为带重音的字符串,然后将其转换为“Ahkka”

到目前为止,我已经尝试过:

function convert($name) {
   $name = html_entity_decode($name,ENT_COMPAT,"UTF-8");
   $name = iconv('UTF-8', 'ASCII//TRANSLIT', $name);
   return $name;
}

我从iconv收到错误:“检测到输入字符串中的非法字符”

我也尝试过使用htmlspecialchars_decode($ name);但这给了我 hkk

我还找到了一个字符串替换函数来清除重音,但我似乎无法将非html字符串传递给它

$name = strtr($name,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');

有人可以提供解决方案吗?服务器正在运行PHP 5.2.13。 iconv已启用glibc 2.5(输入/内部/输出编码为phpinfo中的ISO-8859-1)

1 个答案:

答案 0 :(得分:1)

试图找到问题的解决方案我发现了这个问题:

multibyte strtr() -> mb_strtr()

在选择的答案中,Alix Axel编写的功能正是您所需要的:

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(html_entity_decode('Áhkká'));

打印Ahkka