【问题标题】:Replace Special Characters function issue替换特殊字符功能问题
【发布时间】:2016-04-12 03:49:48
【问题描述】:

我正在使用我在 Stackoverflow 上找到的一个函数来替换一些特殊字符:

function toASCII( $str )
{
    return strtr(utf8_decode($str), 
        utf8_decode(
        'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'),
        'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou');
}

但是,当我尝试 HTML 中的功能时,我没有得到想要的结果。 HTML 代码:

<?php 
$test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű';

$test1 = toASCII($test);
?>

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">

   <head>

       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body>
        <?php echo $test."<br>";
              echo $test1;
        ?>

     </body>
</html>

浏览器中的结果:

ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű
uuuuuuuYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYuusaaaaaaaceeeeiiiionoooooouuuuyyuu

知道为什么某些字符显示为u 而不是所需的吗?

注意:我宁愿避免使用setlocale,因为它需要对代码进行额外更改。

【问题讨论】:

    标签: utf-8 character-encoding ascii special-characters utf8-decode


    【解决方案1】:

    当您使用带有三个参数的 strtr() 时,它使用字节而不是多字节字符(请参阅http://php.net/manual/en/function.strtr.php#111270)。相反,您必须提供一个包含精确映射的数组。

    这将是您的情况的解决方案:

    <?php 
    
    function mbStringToArray( $str ) {
        return preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
    }
    
    function toASCII( $str ) {
        $map = array_combine(
            mbStringToArray('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'),
            mbStringToArray('SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou')
        );
        return strtr($str,$map);
    }
    
    $test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű';
    $test1 = toASCII($test);
    
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        </head>
        <body>
        <?php
            echo $test."<br>";
            echo $test1;
        ?>
        </body>
    </html>
    

    输出:

    ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű
    SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2011-12-28
      相关资源
      最近更新 更多