2011-02-24 64 views
0

我於JavaScript/Node.js的,當我在做這個查詢參數的HTTP請求:對使用​​HTTP請求發送的字符串進行編碼?

?key="https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-#a6e6f" 

我得到一個錯誤,因爲一切的IT部門後:

?key="https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas- 

我想知道如何編碼這個字符串,所以它不會將它切斷?

回答

8

我假設你的URL末尾的散列(#)實際上是查詢參數的一部分。問題是Node.js將它視爲整個URL的散列,這對HTTP請求沒有任何作用。因此,您需要正確編碼查詢字符串。

querystring.stringify這樣的結構化API函數可能是最好的。

var query = querystring.stringify({ 
    key: '"https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-#a6e6f"' 
}); 
+2

或許你可以嘗試:鍵= 「https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-」 + encodeURIComponent方法( 「#a6e6f」); ? – 2011-02-24 03:02:03

+0

凱文·格尼:其實這很好! encodeURI和encodeURIComponent有什麼區別? – ajsie 2011-02-24 03:08:19

+0

剛剛閱讀了解釋:http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent :)你應該把你的評論作爲答案,所以我可以讓它接受的。 – ajsie 2011-02-24 03:12:40

1

urlencode it。 ?

在Javascript:escape(string)

+2

'轉義'不存在NodeJS上。在客戶端JavaScript中,它被棄用,因爲它不適用於非ASCII字符。改用「encodeURI」和「encodeURIComponent」。 – Husky 2011-08-24 18:44:38