douxing7101 2015-06-02 13:43
浏览 24

摆脱口音

I want to remove accents from the following characters, I've thought about the following solution, which probably works, but feels wrong. Does anyone have any smarter way to do it ?

$document = str_replace('ç','c',$document); // get rid of cedille
$document = str_replace('Ç','c',$document);
$document = str_replace('é','e',$document); // get rid of accents on E
$document = str_replace('è','e',$document);
$document = str_replace('ë','e',$document);
$document = str_replace('ê','e',$document);
$document = str_replace('È','e',$document);
$document = str_replace('É','e',$document);
$document = str_replace('Ê','e',$document);
$document = str_replace('Ë','e',$document);
$document = str_replace('À','a',$document); // get rid of accents on A
$document = str_replace('Á','a',$document);
$document = str_replace('Â','a',$document);
$document = str_replace('Ã','a',$document);
$document = str_replace('Ä','a',$document);
$document = str_replace('Å','a',$document);
$document = str_replace('à','a',$document);
$document = str_replace('á','a',$document);
$document = str_replace('â','a',$document);
$document = str_replace('ã','a',$document);
$document = str_replace('ä','a',$document);
$document = str_replace('å','a',$document);
$document = str_replace('Æ','ae',$document); // get rid of Æ and Œ
$document = str_replace('æ','ae',$document); 
$document = str_replace('Œ','oe',$document); 
$document = str_replace('œ','oe',$document); 
$document = str_replace('ì','i',$document); //get rid of accents on I
$document = str_replace('í','i',$document); 
$document = str_replace('î','i',$document); 
$document = str_replace('ï','i',$document); 
$document = str_replace('Ì','i',$document); 
$document = str_replace('Í','i',$document); 
$document = str_replace('Î','i',$document); 
$document = str_replace('Ï','i',$document); 
$document = str_replace('ñ','n',$document); // get rid of accent on N
$document = str_replace('Ñ','n',$document); 
$document = str_replace('ò','o',$document); // get rid of accents on O
$document = str_replace('ó','o',$document); 
$document = str_replace('ô','o',$document); 
$document = str_replace('õ','o',$document); 
$document = str_replace('ö','o',$document); 
$document = str_replace('Ò','o',$document); 
$document = str_replace('Ó','o',$document); 
$document = str_replace('Ô','o',$document); 
$document = str_replace('Õ','o',$document); 
$document = str_replace('Ö','o',$document); 
$document = str_replace('ù','u',$document); // get rid of accents on U 
$document = str_replace('ú','u',$document); 
$document = str_replace('û','u',$document); 
$document = str_replace('ü','u',$document); 
$document = str_replace('Ù','u',$document); 
$document = str_replace('Ú','u',$document); 
$document = str_replace('Û','u',$document); 
$document = str_replace('Ü','u',$document); 
$document = str_replace('ý','y',$document); // get rid of accents on Y
$document = str_replace('ÿ','y',$document); 
$document = str_replace('Ý','y',$document); 
$document = str_replace('Ÿ','y',$document); 
$document = str_replace('ž','z',$document); // get rid of accents on Z
$document = str_replace('Ž','z',$document); 

Edit to answer a comment : a for/foreach loop is just moving the problem, basically I was wondering if there was any way to avoid using str_replace() 50(~) times.

  • 写回答

1条回答 默认 最新

  • dongxian1699 2015-06-02 13:50
    关注

    You can use iconv + ASCII//TRANSLIT.

    $text = 'ç œ æ Ê è';
    $text = strtolower(iconv("UTF-8", "ASCII//TRANSLIT", $text));
    echo $text; // print "c oe ae e e"
    

    Replace UTF-8 with the encoding that you are using. Since ASCII is a subset of many charset (like utf-8) there will no need to convert it back into the original encoding.

    评论

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了