我認爲在表單中輸入的值是由瀏覽器正確編碼的。JS encodeURIComponent結果與FORM創建的結果不同
但是這個簡單的測試文件 「test_get_vs_encodeuri.html」 顯示事實並非如此:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head><body>
<form id="test" action="test_get_vs_encodeuri.html" method="GET" onsubmit="alert(encodeURIComponent(this.one.value));">
<input name="one" type="text" value="Euro-€">
<input type="submit" value="SUBMIT">
</form>
</body></html>
當點擊提交按鈕:
encodeURICompenent編碼輸入值成了「歐洲 - %E2%82%AC 「
,而瀏覽器進入GET查詢只寫一個簡單的 」歐洲 - %80「
有人可以解釋一下嗎?
我如何編碼一切以borwser的形式(windows-1252)使用Javascript的相同方式?(轉義函數不起作用,encodeURIComponent也不起作用)?
或者encodeURIComponent做不必要的轉換?
@Gumbo:謝謝我現在明白了。但是這讓我想到另一個問題,我已經問過,這個該死的encodeURIComponent是有用的嗎?我的意思是即使我使用cp1252,FORM編碼的值也不會錯,那麼爲什麼我應該使用這個該死的encodeURIComponent來編碼URI,我不能使用一個簡單的JS轉義函數來返回與編碼相同的值由表格。我知道這可能不是很好,但最終我更喜歡像瀏覽器的FORM那樣編碼東西。 http://stackoverflow.com/questions/2238515/encodeuricomponent-is-really-useful – 2010-04-11 10:24:11
@Marco Demaio:'escape'有不同的格式:'escape(「€」)===「%u20AC」'。至於「encodeURIComponent」的用途:想象一下你想要建立一個包含'&'值的URI(比如'bar&baz')。 '「...?foo = bar&baz」'會產生兩個參數(* foo *和* baz *),因爲'&'是一個特殊字符。但''...?foo =「+ encodeURIComponent(」bar&baz「)'會做到這一點。 – Gumbo 2010-04-11 10:50:13
對不起,我沒有正確解釋,我說了垃圾,我知道我必須在GET組件中編碼字符'&',但是如何以與使用JS的cp1252相同的FORM方式編碼一切?使用轉義不是方法,但使用encodeURICompoenent不是因爲€編碼不同。 JS有沒有任何功能可以做到這一點?對不起,我也更新了這個問題。 – 2010-04-11 11:06:03