代码之家  ›  专栏  ›  技术社区  ›  Dolph

在PHP中将音调符号替换为“等效”ASCII?

  •  14
  • Dolph  · 技术社区  · 15 年前

    相关问题:

    1. How to replace characters in a java String?
    2. How to replace special characters with their equivalent (such as " á " for " a") in C#?

    在上面的问题中,我正在寻找一种可靠的、健壮的方法,使用PHP将任何Unicode字符减少到接近等价的ASCII。我真的不想把自己的查阅桌卷起来。

    例如(从第一个参考问题中被盗): Gračišće 变成 Gracisce

    4 回复  |  直到 12 年前
        1
  •  32
  •   zombat    15 年前

    这个 iconv 模块可以这样做,更具体地说, iconv() 功能:

    $str = iconv('Windows-1252', 'ASCII//TRANSLIT//IGNORE', "Gracišce");
    echo $str;
    //outputs "Gracisce"
    

    ICONV的主要问题是,您只需观看编码,但它绝对是适合该作业的工具(例如,由于我使用的文本编辑器的限制,我使用了“windows-1252”)。您肯定想使用的ICONV功能是 //TRANSLIT 标志,指示iconv将任何没有ASCII匹配的字符转换为最接近的近似值。

        2
  •  2
  •   hsz    15 年前

    我的解决方案是创建两个字符串-第一个是不需要的字母,第二个是替换第一个字母的字母。

    $from = 'čšć';
    $to   = 'csc';
    $text = 'Gračišće';
    
    $result = str_replace(str_split($from), str_split($to), $text);
    
        3
  •  2
  •   dmmd    12 年前

    我根据@zombat的答案找到了另一个解决方案。

    他回答的问题是我得到了:

    Notice: iconv() [function.iconv]: Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed in D:\www\phpcommand.php(11) : eval()'d code on line 3
    

    移除后 //IGNORE 从函数中,我得到:

    Gr'a'e~a~o^O"ucisce
    

    所以, Å¡ 字符翻译正确,但其他字符没有。

    对我有效的解决方案是 preg_replace (除去除[A-ZA-Z0-9]以外的所有东西,包括空格)和@zombat的解决方案:

    preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', "GráéãõÔücišce"));
    

    输出:

    GraeaoOucisce
    
        4
  •  1
  •   Community CDub    8 年前

    试试这个:

    function normal_chars($string)
    {
        $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
        $string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', $string);
        $string = preg_replace(array('~[^0-9a-z]~i', '~-+~'), ' ', $string);
        return trim($string);
    }
    
    Examples:
    
    echo normal_chars('Álix----_Ãxel!?!?'); // Alix Axel
    echo normal_chars('áéíóúÁÉÍÓÚ'); // aeiouAEIOU
    echo normal_chars('üÿÄËÏÖÜŸåÅ'); // uyAEIOUYaA
    

    基于此线程中选定的答案: URL Friendly Username in PHP?

    推荐文章