【发布时间】:2012-04-04 13:53:28
【问题描述】:
我们有一个加拿大地址的数据库,全部都是大写字母,客户要求我们转换为小写,除了第一个字母和'-'之后的字母
所以我做了这个功能,但是我遇到了法语重音字母的问题。
当文件和字符集为 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 之后,É 也会保持 É。
但是我会遇到在 ex 中包含 É 的问题:XXXÉXXÉ
【问题讨论】:
-
mb_strtoupper("àáâçèéêë", 'UTF-8');或mb_strtolower安装得很好
标签: php encoding utf-8 diacritics