2012-01-27 59 views
2

呃......我很難過,但我確信有一個簡單的解決方案,我希望!陣列不匹配找不到重音字符

我使用Joomla,以下代碼查看Joomla文章標題被拉入頁面並將標題圖像放在標題左側。

<?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' 
); 

if (isset($images[$this->item->title])) { 
?> 
<?php } ?> 
<img src="<?php echo $images[$this->item->title]; ?>" /> <?php echo $this->item->title; ?> 

一切wortks像「倫敦」或美國」正常的話很棒,但我在那裏的時候有我的遊戲,比如下面的重音字符數組不起作用/匹配問題:

éöü權證

在文章的Joomla文章的標題已經放在這樣的 - 位於Montgenèvre

有沒有解決辦法?

編輯: 我從調試得到的輸出如下(INC我的其他陣列。):

- 4D 6F 6E 74 67 65 6E C3 A8 76 72 65 (Montgenèvre) 
+ 41 6E 64 6F 72 72 61 (Andorra) 
+ 47 72 61 6E 64 76 61 6C 69 72 61 (Grandvalira) 
+ 56 61 6C 6C 6E 6F 72 64 (Vallnord) 
+ 48 6F 74 65 6C 20 4D 61 72 63 6F 20 50 6F 6C 6F (Hotel Marco Polo) 
+ 48 6F 74 65 6C 20 41 75 73 74 72 69 61 (Hotel Austria) 
+ 41 75 73 74 72 69 61 (Austria) 
+ 41 6D 61 64 E9 (Amad�) 
+ 42 61 64 20 4B 6C 65 69 6E 6B 69 72 63 68 68 65 69 6D (Bad Kleinkirchheim) 
+ 4D 61 6C 6C 6E 69 74 7A (Mallnitz) 
+ 4E 61 73 73 66 65 6C 64 (Nassfeld) 
+ 4F 62 65 72 74 61 75 65 72 6E (Obertauern) 
+ 53 61 61 6C 62 61 63 68 2D 48 69 6E 74 65 72 67 6C 65 6D 6D (Saalbach-Hinterglemm) 
+ 53 63 68 6C 61 64 6D 69 6E 67 2D 41 6D 61 64 E9 (Schladming-Amad�) 
+ 53 6B 69 77 65 6C 74 (Skiwelt) 
+ 57 69 6C 64 73 63 68 F6 6E 61 75 (Wildsch�nau) 
+ 5A 65 6C 6C 20 61 6D 20 53 65 65 (Zell am See) 
+ 5A 69 6C 6C 65 72 74 61 6C (Zillertal) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 48 6F 72 62 72 75 6E 6E (Jugendg�stehaus Horbrunn) 
+ 47 61 73 74 68 6F 66 20 41 69 67 6E 65 72 (Gasthof Aigner) 
+ 48 6F 74 65 6C 20 53 74 61 64 6C 6D FC 68 6C 65 (Hotel Stadlm�hle) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 4B 69 74 7A 73 74 65 69 6E 68 6F 72 6E (Jugendg�stehaus Kitzsteinhorn) 
+ 4A 75 67 65 6E 64 70 65 6E 73 69 6F 6E 20 41 6E 67 65 72 68 6F 66 (Jugendpension Angerhof) 
+ 47 6F 6C 64 65 6E 65 72 20 4C 6F 77 65 (Goldener Lowe) 
+ 47 61 73 74 68 6F 66 20 53 74 61 6D 6D 65 72 68 6F 66 (Gasthof Stammerhof) 
+ 46 65 72 69 65 6E 67 75 74 20 47 72 75 62 68 6F 66 (Feriengut Grubhof) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 48 6F 63 68 6B 6F 67 65 6C (Jugendg�stehaus Hochkogel) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 42 61 63 68 62 61 75 65 72 6E 68 6F 66 (Jugendg�stehaus Bachbauernhof) 
+ 4A 75 67 65 6E 64 68 65 69 6D 20 42 65 72 67 68 6F 66 (Jugendheim Berghof) 
+ 47 61 73 74 68 61 75 73 20 54 68 75 72 6E 65 72 68 6F 66 (Gasthaus Thurnerhof) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 46 65 6C 73 65 72 61 6C 6D (Jugendg�stehaus Felseralm) 
+ 53 70 6F 72 74 68 6F 74 65 6C 20 4C 65 69 74 6E 65 72 (Sporthotel Leitner) 
+ 47 61 73 74 68 6F 66 20 47 61 69 6C 74 61 6C 65 72 68 6F 66 (Gasthof Gailtalerhof) 
+ 47 61 73 74 68 6F 66 20 45 72 6C 65 6E 68 6F 66 (Gasthof Erlenhof) 
+ 48 6F 74 65 6C 20 42 69 63 68 6C 68 6F 66 (Hotel Bichlhof) 
+ 48 6F 74 65 6C 20 54 68 75 72 6E 65 72 68 6F 66 (Hotel Thurnerhof) 
+ 53 70 6F 72 74 68 6F 74 65 6C 20 4D 69 72 6E 6F 63 6B (Sporthotel Mirnock) 
+ 4A 75 67 65 6E 64 68 65 69 6D 20 57 65 69 74 65 6E 6D 6F 6F 73 (Jugendheim Weitenmoos) 
+ 4A 75 67 65 6E 64 68 6F 74 65 6C 20 53 69 6D 6F 6E 79 68 6F 66 (Jugendhotel Simonyhof) 
+ 4A 47 48 20 53 61 72 69 6E 67 67 75 74 (JGH Saringgut) 
+ 50 65 6E 73 69 6F 6E 20 57 61 6C 63 68 68 6F 66 67 75 74 (Pension Walchhofgut) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 57 65 6E 67 68 6F 66 (Jugendg�stehaus Wenghof) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 4D 61 72 6B 75 73 68 6F 66 (Jugendg�stehaus Markushof) 
+ 4A 75 67 65 6E 64 67 E4 73 74 65 68 61 75 73 20 45 64 74 68 6F 66 (Jugendg�stehaus Edthof) 
+ 43 61 6E 61 64 61 (Canada) 
+ 4C 65 20 4D 61 73 73 69 66 20 26 20 4D 6F 6E 74 20 53 61 69 6E 74 65 20 41 6E 6E 65 (Le Massif & Mont Sainte Anne) 
+ 54 72 65 6D 62 6C 61 6E 74 (Tremblant) 
+ 4C 65 73 20 53 75 69 74 65 73 20 54 72 65 6D 62 6C 61 6E 74 (Les Suites Tremblant) 
+ 43 68 61 74 65 61 75 20 4D 6F 6E 74 20 53 61 69 6E 74 65 20 41 6E 6E 65 (Chateau Mont Sainte Anne) 
+ 46 72 61 6E 63 65 (France) 
+ 41 6C 70 65 20 44 60 48 75 65 7A (Alpe D`Huez) 
+ 4C 65 20 43 6F 72 62 69 65 72 (Le Corbier) 
+ 4C 65 73 20 44 65 75 78 20 41 6C 70 65 73 (Les Deux Alpes) 
+ 4D 6F 6E 74 67 65 6E E8 76 72 65 (Montgen�vre) 
+ 52 69 73 6F 75 6C (Risoul) 
+ 4C 65 73 20 4F 72 72 65 73 (Les Orres) 
+ 4D 6F 72 7A 69 6E 65 (Morzine) 
+ 53 65 72 72 65 20 43 68 65 76 61 6C 69 65 72 (Serre Chevalier) 
+ 4D 65 72 69 62 65 6C 20 2F 20 54 72 6F 69 73 20 56 61 6C 6C E9 65 73 (Meribel/Trois Vall�es) 
+ 48 6F 74 65 6C 20 4C 65 20 50 69 65 64 20 4D 6F 75 74 65 74 (Hotel Le Pied Moutet) 
+ 48 6F 74 65 6C 20 44 65 73 20 4E 65 69 67 65 73 (Hotel Des Neiges) 
+ 48 6F 74 65 6C 20 4C 20 41 6E 63 6F 6C 69 65 (Hotel L Ancolie) 
+ 43 65 6E 74 72 65 20 64 65 20 56 61 63 61 6E 63 65 73 20 4C 20 45 73 63 61 6C 61 64 65 (Centre de Vacances L Escalade) 
+ 48 6F 74 65 6C 20 53 65 72 72 65 20 43 68 65 76 61 6C 69 65 72 (Hotel Serre Chevalier) 
+ 51 75 61 74 72 65 20 53 61 69 73 6F 6E 73 (Quatre Saisons) 
+ 48 6F 74 65 6C 20 4C 65 73 20 43 68 61 6C 65 74 73 (Hotel Les Chalets) 
+ 49 74 61 6C 79 (Italy) 
+ 41 70 72 69 63 61 (Aprica) 
+ 42 61 72 64 6F 6E 65 63 63 68 69 61 (Bardonecchia) 
+ 43 69 76 65 74 74 61 (Civetta) 
+ 46 6F 6C 67 61 72 69 61 (Folgaria) 
+ 50 69 61 6E 63 61 76 61 6C 6C 6F (Piancavallo) 
+ 50 61 73 73 6F 20 54 6F 6E 61 6C 65 (Passo Tonale) 
+ 48 6F 74 65 6C 20 52 6F 6D 61 (Hotel Roma) 
+ 48 6F 74 65 6C 20 42 65 7A 7A 69 (Hotel Bezzi) 
+ 48 6F 74 65 6C 20 4C 6F 63 61 6E 64 61 20 4C 6F 63 61 74 6F 72 69 (Hotel Locanda Locatori) 
+ 48 6F 74 65 6C 20 52 65 67 69 6E 61 (Hotel Regina) 
+ 48 6F 74 65 6C 20 53 74 65 6C 6C 61 20 4D 6F 6E 74 69 73 (Hotel Stella Montis) 
+ 48 6F 74 65 6C 20 4D 69 6C 61 6E 6F (Hotel Milano) 
+ 48 6F 74 65 6C 20 53 61 79 6F 6E 61 72 61 (Hotel Sayonara) 
+ 48 6F 74 65 6C 20 54 6F 6D 61 73 69 (Hotel Tomasi) 
+ 48 6F 74 65 6C 20 47 61 72 64 65 6E (Hotel Garden) 
+ 48 6F 74 65 6C 20 43 61 73 61 20 41 6C 70 69 6E 61 (Hotel Casa Alpina) 
+ 48 6F 74 65 6C 20 56 69 6C 6C 61 67 69 6F 20 4F 6C 69 6D 70 69 63 6F (Hotel Villagio Olimpico) 
+ 48 6F 74 65 6C 20 53 6F 6D 6D 65 69 6C 6C 65 72 (Hotel Sommeiller) 
+ 48 6F 74 65 6C 20 54 6F 72 65 6E 61 (Hotel Torena) 
+ 48 6F 74 65 6C 20 53 70 6F 72 74 (Hotel Sport) 
+ 48 6F 74 65 6C 20 47 69 6E 65 70 72 6F (Hotel Ginepro) 
+ 53 70 61 69 6E (Spain) 
+ 41 6C 70 20 32 35 30 30 (Alp 2500) 
+ 48 6F 6C 69 64 61 79 20 43 65 6E 74 72 65 20 41 6C 62 65 72 67 75 65 (Holiday Centre Albergue) 
+ 48 6F 74 65 6C 20 41 6C 70 20 4D 61 73 65 6C 6C 61 (Hotel Alp Masella) 
+ 53 77 69 74 7A 65 72 6C 61 6E 64 (Switzerland) 
+ 53 61 61 73 20 46 65 65 (Saas Fee) 
+ 48 6F 74 65 6C 20 52 6F 64 61 6E 69 61 (Hotel Rodania) 
+ 55 53 41 (USA) 
+ 4B 69 6C 6C 69 6E 67 74 6F 6E (Killington) 
+ 50 69 63 6F (Pico) 
+ 53 74 6F 77 65 (Stowe) 
+ 4D 6F 75 6E 74 20 53 6E 6F 77 (Mount Snow) 
+ 53 75 6E 64 61 79 20 52 69 76 65 72 (Sunday River) 
+ 53 75 67 61 72 6C 6F 61 66 (Sugarloaf) 
+ 4C 6F 6F 6E (Loon) 
+ 43 61 6E 6E 6F 6E (Cannon) 
+ 57 61 74 65 72 76 69 6C 6C 65 20 56 61 6C 6C 65 79 (Waterville Valley) 
+ 43 72 61 6E 6D 6F 72 65 (Cranmore) 
+ 57 69 6C 64 63 61 74 (Wildcat) 
+ 41 74 74 69 74 61 73 68 (Attitash) 
+ 42 72 65 74 74 6F 6E 20 57 6F 6F 64 73 (Bretton Woods) 
+ 57 69 6E 74 65 72 20 50 61 72 6B (Winter Park) 
+ 41 6C 70 69 6E 65 20 4D 65 61 64 6F 77 73 (Alpine Meadows) 
+ 48 6F 6D 65 77 6F 6F 64 (Homewood) 
+ 48 65 61 76 65 6E 6C 79 (Heavenly) 
+ 53 69 65 72 72 61 2D 61 74 2D 54 61 68 6F 65 (Sierra-at-Tahoe) 
+ 4D 6F 75 6E 74 61 69 6E 20 49 6E 6E (Mountain Inn) 
+ 43 6F 6D 66 6F 72 74 20 49 6E 6E 20 61 74 20 54 72 6F 6C 6C 65 79 20 53 71 75 61 72 65 (Comfort Inn at Trolley Square) 
+ 47 72 65 79 20 42 6F 6E 6E 65 74 20 49 6E 6E (Grey Bonnet Inn) 
+ 48 6F 6C 69 64 61 79 20 49 6E 6E (Holiday Inn) 
+ 52 61 6D 61 64 61 20 49 6E 6E (Ramada Inn) 
+ 52 65 64 20 52 6F 6F 66 20 49 6E 6E (Red Roof Inn) 
+ 43 6F 6D 6D 6F 64 6F 72 65 73 20 49 6E 6E (Commodores Inn) 
+ 4D 6F 75 6E 74 61 69 6E 65 65 72 20 49 6E 6E (Mountaineer Inn) 
+ 54 68 65 20 4C 6F 64 67 65 20 61 74 20 4D 6F 75 6E 74 20 53 6E 6F 77 (The Lodge at Mount Snow) 
+ 53 6E 6F 77 20 4C 61 6B 65 20 4C 6F 64 67 65 (Snow Lake Lodge) 
+ 4A 6F 72 64 61 6E 20 47 72 61 6E 64 20 48 6F 74 65 6C (Jordan Grand Hotel) 
+ 53 6E 6F 77 20 43 61 70 20 49 6E 6E 20 61 6E 64 20 53 6B 69 20 44 6F 72 6D (Snow Cap Inn and Ski Dorm) 
+ 53 75 67 61 72 6C 6F 61 66 20 4D 6F 75 6E 74 61 69 6E 20 48 6F 74 65 6C (Sugarloaf Mountain Hotel) 
+ 53 75 67 61 72 6C 6F 61 66 20 43 6F 6E 64 6F 73 (Sugarloaf Condos) 
+ 53 75 67 61 72 6C 6F 61 66 20 49 6E 6E (Sugarloaf Inn) 
+ 4E 6F 72 74 68 20 43 6F 6E 77 61 79 20 47 72 61 6E 64 (North Conway Grand) 
+ 54 6F 77 6E 20 26 20 43 6F 75 6E 74 72 79 20 49 6E 6E (Town & Country Inn) 
+ 56 61 6C 6C 65 79 20 49 6E 6E (Valley Inn) 
+ 57 6F 6F 64 77 61 72 64 73 20 52 65 73 6F 72 74 (Woodwards Resort) 
+ 42 65 61 63 6F 6E 20 52 65 73 6F 72 74 (Beacon Resort) 
+ 42 65 61 76 65 72 20 56 69 6C 6C 61 67 65 20 43 6F 6E 64 6F 73 (Beaver Village Condos) 
+ 56 69 6E 74 61 67 65 20 48 6F 74 65 6C (Vintage Hotel) 
+ 46 65 72 72 61 72 69 73 20 43 72 6F 77 6E 20 52 65 73 6F 72 74 (Ferraris Crown Resort) 
+ 47 72 61 6E 64 20 53 69 65 72 72 61 20 52 65 73 6F 72 74 20 26 20 43 61 73 69 6E 6F (Grand Sierra Resort & Casino) 
+ 46 6F 72 65 73 74 20 53 75 69 74 65 73 20 52 65 73 6F 72 74 (Forest Suites Resort) 
+ 51 75 61 6C 69 74 79 20 49 6E 6E 20 61 6E 64 20 53 75 69 74 65 73 (Quality Inn and Suites) 
+ 43 6C 75 62 48 6F 74 65 6C 20 42 65 61 75 73 6F 6C 65 69 6C (ClubHotel Beausoleil) 
+ 43 6C 75 62 48 6F 74 65 6C 20 4C 65 20 4D 6F 6E 74 20 43 6F 72 62 69 65 72 (ClubHotel Le Mont Corbier) 
+ 43 6C 75 62 48 6F 74 65 6C 20 50 72 6F 76 65 6E E7 61 6C (ClubHotel Proven�al) 
+ 43 6C 75 62 48 6F 74 65 6C 20 4C 65 73 20 52 6F 69 73 20 4D 61 67 65 73 (ClubHotel Les Rois Mages) 
+ 43 6C 75 62 48 6F 74 65 6C 20 4C 65 
+0

確保$ this-> item-> title和數組中的條目使用相同的字符集,例如UTF-8 – 2012-01-27 09:47:04

+0

IIRC PHP仍然使用ascii代碼(但支持其他字符集作爲數據) - 數組鍵可能是臨界情況 – symcbean 2012-01-27 09:49:17

+0

mmm ...看起來他們都使用UTF-8並且標題正被放入MySQL表作爲Montgenèvre – user991830 2012-01-27 09:56:09

回答

1

不是一個解決方案,但作爲註釋不可行:
請添加一些調試代碼和輸出添加到您原來的問題,所以我們可以看到字符串的實際編碼

<?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</pre>"; 
// debug code --> 

更新:
輸出表明您的php腳本文件不是utf-8編碼的,即數組$ image中的字符串文字是iso-8859編碼的。 PHP(至少當前的5.x版本)進行逐字節的比較,沒有編碼的概念,在php內核中預留了兩種不同編碼的比較。 (見http://docs.php.net/mbstring)。

將腳本文件轉換爲utf-8,從而使用UTF-8編碼的字符串*。
或者(甚至可能更好)將這些字符串移動到數據庫(例如,有另一個表並使用某個JOIN語句查詢數據)。


*)對於很多字符,UTF-8中有多個表示。因此,像php中的$x===$y這樣的簡單字節比較可能仍然失敗。如果你想使用UTF-8識別比較函數的健壯代碼應該是強制性的。這就是爲什麼我把這個邏輯放到數據庫中(然後可能使用了另一個分類器,例如類別id,即字符串以外的東西,可能是整數或數據庫系統提供的標識符)。

+0

上述調試測試的結果:6E E8 76 72 65(Montgen vre) – user991830 2012-01-27 11:06:20

+0

這看起來不像完整的調試輸出...請將輸出添加到您的原始問題:http://stackoverflow.com/posts/9031395 /編輯 – VolkerK 2012-01-27 11:09:38

+0

debug output added to original post ;-) – user991830 2012-01-27 11:13:45