У нас есть база данных канадских адресов, написанных ЗАГЛАВНЫМИ БУКВАМИ, клиент запросил преобразование в нижний регистр, за исключением первой буквы и буквы после '-'
Итак, я сделал эту функцию , но у меня проблема с французскими буквами с акцентом.
При наличии файла и кодировки в формате ISO-88591 он работает нормально, но когда я пытаюсь сделать его UTF-8, он больше не работает.
Пример ввода: 'Дамьен-Клод Эланже' вывод: 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É