如何在PHP中完全替换所有特殊字符而不在结果中留下任何HTML实体
作者:互联网
我需要帮助我正在尝试创建的PHP替换函数.
基本上,我想FYLLY转换所有特殊字符,如á,é,í,ó,ú,ü,ñ,Á,É,Í,Ó,Ú,Ü,Ñ等等到这个:a,e,i, o,u,u,n,A,E,I,O,U,U,N.下面解释了为什么我说“FULLY convert”.
现在我只使用以下功能设法做到了这一半:
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& Acirc;?balos.
我希望能够用我的功能替换那部分& Acirc ;?.
怎么能实现这一目标?
解决方法:
我找到了这个函数(在这个帖子中:How to remove accents and turn letters into “plain” ASCII characters?):
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
标签:php,regex,html-entities,preg-replace,str-replace 来源: https://codeday.me/bug/20190623/1273689.html