Не решение, но невозможно в качестве комментария:
Пожалуйста, добавьте некоторый код отладки и добавьте вывод к исходному вопросу, чтобы мы могли видеть фактическое кодирование строк
<code><?php
$images = array (
'Montgenèvre' => 'images/flags/small/france_sm.jpg',
'Jugendgastehaus Edthöf' => 'images/flags/small/austria_sm.jpg',
'Jugendgästehaus Wenghof' => 'images/flags/small/austria_sm.jpg',
'Hotel Stadlmühle' => 'images/flags/small/austria_sm.jpg',
'ClubHotel Provençal' => 'images/flags/small/france_sm.jpg'
);
// <-- debug code
function dbgString2Hex($s) {
$rv = '';
for($i=0; $i<strlen($s); $i++) {
$rv .= sprintf('%02X ', ord($s[$i]));
}
return $rv;
}
echo "<pre>\n";
$dbgTitle = $this->item->title;
//$dbgTitle = 'Montgenèvre';
echo '- ', dbgString2Hex($dbgTitle), "($dbgTitle)\n";
foreach( $images as $dbgKey=>$dbgValue ) {
echo '+ ', dbgString2Hex($dbgKey), "($dbgKey)\n";
}
echo "\n
"; // debugcode ->
update:
Вывод предполагает, что ваш файл php-скрипта не имеет кодировки utf-8, т.е. строковые литералы в вашем массиве $ images имеют кодировку iso-8859PHP (по крайней мере, в текущих версиях 5.x) выполняет побайтовое сравнение, нет понятия, что кодирование установлено отдельно от сравнения двух разных кодировок в ядре php (см. http://docs.php.net/mbstring).
Либо преобразуйте файл сценария в utf-8 и, таким образом, получите строковые литералы в кодировке utf-8 *.
Или (возможно, даже лучше) переместите эти строки в базу данных (например, с другой таблицей и запросите данные с помощьюнекоторые операторы JOIN).
*) Для многих символов в utf-8 имеется более одного представления. Поэтому простое сравнение байтов, подобное тому, как это было сделано для $x===$y
в php, все равно может завершиться неудачей. Если выНадежный код, использующий функцию сравнения с поддержкой utf-8, должен быть обязательным.Вот почему я поместил эту логику в базу данных (а затем, вероятно, использовал другой дискриминатор, такой как, например, идентификатор категории, то есть что-то отличное от строки, может быть целое число или все, что система баз данных предлагает в качестве идентификатора).