這篇屬於問題紀錄與小心得~

有一天,當我快樂的在使用 javascript 傳遞參數到後端 C# 的時候發生了一個詭異的問題

例子大概是這樣:

//本來使用 encodeURI 後來使用 encodeURIComponent

//兩者的差別可以參考人家寫的文章:http://www.victsao.com/blog/81-javascript/88-javas...

var arr = [];

arr.push("keyword=" + encodeURIComponent(keyword));

arr.push("sort=" + encodeURI(sort));

......

location.href = "test.aspx?" + arr.join("&");


然後 keyword 輸入韓文 

창의 동물 그리기 놀이   <--- 這個不知道什麼字

編碼過的韓文透過網址列參數傳遞就會變成這樣

但是由 C# 輸出到前端就會變這樣 : 창의 동&#47932; 그리기 놀이

莫名其妙有一個字變成 &#47932; (第一個字被我用全型了,不然網頁看會被顯示為물)

因為變成了 &#47932;  所以會造成搜尋關鍵字到資料庫找的時候就會找不到正確的資料


解決方法也沒有很難,只是搞了很久最後只好折衷這樣做:

因為 &#.... 代表的是 html encode 後的編碼

雖然只有一個字莫名其妙被 encode,但是對原本沒有被 encode 的文字 decode 也不會有影響

所以在 Server side 的 C# 加上 

string title = System.Net.WebUtility.HtmlDecode(title);

就解決了


ps : 還是不知道為什麼一串字裡面只有一個字會被 encode


創作者介紹
創作者 小雕 的頭像
小雕

小雕雕的家

小雕 發表在 痞客邦 留言(0) 人氣()