2011-11-30 47 views
1

我想將用戶條目發送到Google的地理編碼API。這樣做,我發現了一個問題。 當我通過我的腳本將用戶輸入(例如「köln+ Germany」)發送到Firefox中的api時,它非常棒。但在Internet Explorer中,它不起作用。網址編碼在Firefox和Internet Explorer中的行爲有所不同

這裏是免稅的我的代碼這足以說明問題:在Firefox

header('Content-type: text/html; charset=UTF-8'); 
header('Cache-Control: no-cache, must-revalidate'); 
$loc = urlencode($_GET['loc']); 
echo $address = "http://maps.googleapis.com/maps/api/geocode/json?address=$loc&sensor=false"; 

輸出($地址):http://maps.googleapis.com/maps/api/geocode/json?address=k%C3%B6ln+Germany&sensor=false(作品!)

在Internet Explorer中同樣是: http://maps.googleapis.com/maps/api/geocode/json?address=k%F6ln+Germany&sensor=false(返回「INVALID_REQUEST」)

您可以看到ö編碼的區別。在Firefox中它是%C3%B6,在IE中它是k%F6。 如果我以用戶輸入「k%C3%B6ln + Germany」開頭,它在Internet Explorer中也像魅力一樣。

如何用PHP確保我的特殊字符在Internet Explorer中的轉換與Firefox中的相同。所以ö=%C3%B6而不是ö= k%F6

非常感謝!

保羅

回答

3

這是一個編碼的問題,在Firefox的默認編碼爲UTF-8,而在IE中它是一些ISO-XXXX-X,嘗試設置

<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

在你的HTML - <head>...</head>這會將編碼設置爲UTF-8,因此IE會像Firefox那樣對字符串進行urlencode編碼,因此會產生工作請求。

順便說一句,如果你想要的是一個鏈接,所以你應該

echo '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body>'; 

您呼應<a href=...>

echo '</body></html>'; 

之前之後,你應該提供一個HTML頁面。

這樣IE將在顯示鏈接時使用給定的UTF-8編碼。

這看起來好像是把沒有的東西的工作,屁股那麼IE解碼給出<a href=...>,猜測它是一個鏈接,然後讓他自己的HTML頭體圍繞它來顯示它 - 然後包括<meta http-equiv="content-type" content="text/html; charset=ISO-XXXX-X">代替。

如果您只是通過「AJAX」鏈接到已經加載的頁面,請確保此頁面包含提到的元標記。

+0

感謝您的回答!我以前可能應該說過,但實際上我不打算輸出一個html頁面。它最終會生成json,所以我對添加meta標籤有點猶豫。你覺得怎麼樣? –

+0

更新:當輸出HTML時,這似乎也不起作用。任何其他想法? –

0

所以我知道這不可能是正確的解決方案,但任何人都遇到了同樣的問題,這種解決方法爲我工作:

$loc = $_GET['loc']; 
$loc = utf8_encode($loc); 
$trans = array("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss"); 
$loc = strtr($loc, $trans); 
$loc = urlencode($loc); 

因爲我不需要保留在變音符號我上下文這是好的。

0

問題只是間接與瀏覽器有關。 urlencode將字符串視爲一系列字節,因此受到服務器頁面使用的語言環境的影響。大多數Web服務器檢查瀏覽器的語言設置以檢測此設置並將其用於本地化文本生成和解析。 IE的語言設置默認爲操作系統用戶的語言環境設置。

這意味着Firefox可能會報告英語作爲用戶的首選語言,而IE會在同一臺計算機上報告德語。除非你先將輸入字符串專門轉換爲UTF8,否則轉換將取決於客戶端的區域設置

相關問題