我有一個JavaScript文件,很多人都嵌入到他們的頁面。由於我託管該文件,因此我可以控制該JavaScript文件;我無法控制它的嵌入方式,因爲很多人已經在使用它。如何使用JavaScript中的相同編碼發送參數?
這個JavaScript文件發送GET請求我的servlet和與請求傳遞的參數被記錄到數據庫。例如,javascript向http://myserver.com/servlet?p1=123&p2=aString
發送請求,然後servlet以某種方式將123
和aString
記錄到DB。
之前發送的字符串我用encodeURIComponent()
來編碼。但是我發現每個客戶都使用不同的編碼發送相同的字符串,具體取決於他們的瀏覽器或他們正在訪問的網站。結果,相同的字符串在到達servlet時用不同的字符表示(所以它們是不同的字符串)。
我所試圖做的是字符串從JavaScript轉換爲一種編碼的,所以當他們到達客戶端同樣的話用相同的字符表示。
這怎麼可能?
PS。如果有辦法從Java轉換編碼,它也適用。
編輯:更確切地說,我從頁面中選擇一些單詞並將其發送到服務器。這是編碼導致問題的地方。
編輯2:我不發送(並且不能發送)通過XMLHttpRequest
的GET請求,因爲域是不同的。我正在使用@streetpc提到的將script
標記添加到head
方法。
編輯3:在我消毒通過JavaScript端取代非ASCII字符的字符串的時刻,但我有一種感覺,這是不是要走的路:
function sanitize(word) {
/*
ğ : \u011f
ü : \u00fc
ş : \u015f
ö : \u00f6
ç : \u00e7
ı : \u0131
û : \u00fb
*/
return encodeURIComponent(
word.replace(/\u011f/g, '_g')
.replace(/\u00fc/g, '_u')
.replace(/\u00fb/g, '_u')
.replace(/\u015f/g, '_s')
.replace(/\u00f6/g, '_o')
.replace(/\u00e7/g, '_c')
.replace(/\u0131/g, '_i'));
}
我正在使用非ASCII字符,這就是爲什麼我遇到問題。 – nimcap 2010-04-12 14:30:28
您在返回的'.js'中使用文字,原始非ASCII字符?如果是這樣,您將需要對它們進行編碼,以便它們僅適用於ASCII。對於字符串文字來說,這很容易,如上所述。 (我想不出你需要字符串以外的非ASCII字符的原因。) – bobince 2010-04-12 14:32:02
我更新了我的問題,使其更加清晰,我使用非ASCII字符但不直接在JS中。我從頁面中獲取它們,通常包含非ASCII字符。 – nimcap 2010-04-12 14:50:03