如何完全替换 PHP 中的所有特殊字符而不在结果中留下任何 HTML 实体

How to fully replace all special characters in PHP without leaving any HTML Entity in the result

我需要有关我尝试创建的 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', '', 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

我希望能够用我的函数替换那部分 Â?。 如何实现?

我找到了这个函数(在这个线程中: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

您可以使用 iconv 来完成此操作。

<?php

    setlocale(LC_ALL, 'en_US.UTF-8');

    $str = "Ábalos";

    echo iconv('UTF-8', 'ASCII//TRANSLIT', $str);

?>