乌克兰语和法语重音lettres编码 [英] ucwords and french accented lettres encoding

查看:127
本文介绍了乌克兰语和法语重音lettres编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个加拿大地址的数据库全部在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);
}

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



但是,我会遇到É内部的问题:XXXÉXXÉ

解决方案

为多字节字符尝试 mb _ * 字符串函数。 / p>

  echo mb_convert_case(mb_strtolower($ str),MB_CASE_TITLE,UTF-8); 


We have a database of Canadian addresses all in CAPS , the client requested that we transform to lower case expect the first letter and the letter after a '-'

So i made this function , but I'm having problem with french accented letters .

When having the file and charset as ISO-88591 It works fine , but when i try to make it UTF-8 it doesn't work anymore .

Example of input : 'damien-claude élanger' output : Damien-Claude élanger

the é in utf-8 will become �

 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) ;
        }

The Other solution i have in mind is to do : ucwords(strtolower($str)) since all the addresses are already in caps so the É will stay É even after applying strtolower .

But then I'll have the problem of having É inside ex : XXXÉXXÉ

解决方案

Try mb_* string functions for multibyte characters.

echo mb_convert_case(mb_strtolower($str), MB_CASE_TITLE, "UTF-8");

这篇关于乌克兰语和法语重音lettres编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆