编程语言
首页 > 编程语言> > 如何在PHP中完全替换所有特殊字符而不在结果中留下任何HTML实体

如何在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