我一直在阅读其他一些问题,但我仍然坚持将包含重音字符的字符串转换为普通字符的问题(我指的是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)
答案 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