ucwords和法语口音lettres编码

Tar*_*rek 5 php encoding utf-8 diacritics

我们在CAPS中有一个加拿大地址数据库,客户要求我们转换为小写字母,期望第一个字母和' - '后的字母

所以我做了这个功能,但是我遇到了法语重音字母的问题.

当文件和字符集为ISO-88591它工作正常,但当我尝试使它UTF-8它不再工作.

输入示例:'damien-claudeélanger'输出:Damien-Claudeélanger

utf-8中的é将成为

 function cap_letter($string) {
            $lower     = str_split("àáâçèéêë");
            $caps      = str_split("ÀÁÂÇÈÉÊË");
            $letters   = str_split(strtolower($string));

            foreach($letters as $code => $letter) {
                if($letter === '-' || $letter === ' ') {
                    $position = array_search($letters[$code+1],$lower);
                    if($position !== false) {
                        // test
                        echo $letters[$code+1] . ' == ' . $caps[$position] ; 
                        $letters[$code+1] = $caps[$position];
                    }
                    else {
                        $letters[$code+1] = mb_strtoupper($letters[$code+1]);
                    } 
                }
            }
            //return ucwords(implode($letters)) ;
            return implode($letters) ;
        }
Run Code Online (Sandbox Code Playgroud)

我想到的其他解决方案是:ucwords(strtolower($ str))因为所有的地址都已经上限所以即使在应用了strtolower之后É也将保持É.

但是我会在ex:XXXÉXXÉ里面有É的问题

saf*_*rov 9

尝试mb_*多字节字符的字符串函数.

echo mb_convert_case(mb_strtolower($str), MB_CASE_TITLE, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

  • 试过......它将从字符串中完全删除重音字符. (5认同)