這篇屬於問題紀錄與小心得~
有一天,當我快樂的在使用 javascript 傳遞參數到後端 C# 的時候發生了一個詭異的問題
例子大概是這樣:
//本來使用 encodeURI 後來使用 encodeURIComponent
//兩者的差別可以參考人家寫的文章:http://www.victsao.com/blog/81-javascript/88-javas...
var arr = [];
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