我们有加拿大地址的数据库都在CAPS,客户要求我们转换成小写想到的第一个字母和字母后“ - ”ucwords和法国的重音lettres编码
所以我做了这个功能,但我遇到法语重音字母的问题。
当文件和字符集作为ISO-88591它工作正常,但是当我试图使它UTF-8它不再工作。输入的
例如: '达明克劳德élanger' 输出:达明克劳德élanger
在E 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之后,它仍然会保留。
但后来我不得不在内部具有前e的问题:XXXÉXXÉ
'mb_strtoupper( “àáâçèéêë”, 'UTF-8');'或'mb_strtolower'工作完全正常insted的 – Baba 2012-04-04 14:02:21
类似的,以及只是:[如何使西里尔字符大写?](http://stackoverflow.com/q/10012445/367456) – hakre 2012-04-04 14:21:48