我需要有关我正在尝试创建的PHP替换函数的帮助。
基本上,我想将所有特殊字符(如á, é, í, ó, ú, ü, ñ, Á, É, Í, Ó, Ú, Ü, Ñ
等)转换为:a, e, i, o, u, u, n, A, E, I, O, U, U, N
.下面解释了为什么我说"完全转换"。
现在我只设法使用以下函数完成了一半:
function clean_url($text){
$text = preg_replace('~&([a-z]{1,10})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($text, ENT_QUOTES, 'UTF-8'));
return $text;
}
乍一看,这给了我在 MySQL 或浏览器中查看时想要的结果,所以在 PHP 中:
$string = "Ábalos";
echo clean_url($string);
HTML 页面源代码输出:Abalos
.乍一看,这看起来很合适。
但是当我这样做时
$string = "Ábalos";
echo htmlentities(clean_url(($string));
HTML 页面源代码输出:AÂ?balos
.
我希望能够用我的函数替换那部分Â?
.如何实现这一点?
我发现了这个函数(在这个线程中:如何删除重音并将字母转换为"纯"ASCII 字符?
function toASCII( $str )
{
return strtr(utf8_decode($str),
utf8_decode(
'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
}
我测试了一些字符串,它可以工作。例如:
function toASCII( $str )
{
return strtr(utf8_decode($str),
utf8_decode(
'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
}
$string = "Ábalos";
echo toASCII($string);
将打印Abalos
您可以使用iconv
来完成此操作。
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
$str = "Ábalos";
echo iconv('UTF-8', 'ASCII//TRANSLIT', $str);
?>