2010-08-30 48 views
1

我對JavaScript中的URL中的特殊/擴展UTF-8字符編碼有疑問。同樣的問題適用於許多字符,如已註冊的R-圓,但我的例子使用一個變音符:JavaScript中的字符/ URI編碼不同步?

U =%C3%BC以UTF-8

(從http://www.utf8-chartable.de/底部四行)如果url包含以UTF-8(ü=%C3%BC)表示的變音符號,並且我通過encodeURIComponent運行它,%s正在編碼,字符串現在看起來像「%25C3%25BC」,並且它被我的系統正確處理。這很好。

url =「http://foo.com/bar.html?%C3%BC
url = encodeURIComponent(url);
// URL現在表示爲 「HTTP%3A%2F%2Ffoo.com%2Fbar.html%3F%25C3%25BC」

然而,壞:如果預編碼串具有的未編碼的字符,實際的變音,編碼後看起來像 「%C3%BC」 和失敗,因爲,我相信,在%S應進行編碼,太:

URL = 「http://foo.com/bar.html?ü
URL = encodeURIComponent方法(URL) ;
// URL現在表示爲 「HTTP%3A%2F%2Ffoo.com%2Fbar.html%3F%C3%BC」

我覺得它失敗,因爲它是不太徹底,比URL的其餘部分編碼。

因此,除了一般建議或對問題的回答,我不知道要問什麼,我想我想知道的是如何獲得原始變音符號(以及所有其他特殊字符)以完全編碼。那是不正確的?

感謝您的幫助! Nate

+0

你是雙編碼。你使用的是什麼樣的系統? – jpsimons 2011-03-31 01:33:51

回答

0

不能一次編碼一個URL。如果您已經將主機,路徑,參數等連接在一起,則無法正確確定哪些字符實際上需要編碼,哪些字符是需要單獨保留的分隔符。

建立一個URL的唯一可靠的方法是通過連接已編碼的值:

"http://foo.com/bar.html?" + encodeURIComponent("%C3%BC")