因為想要收集瀏覽頁面的 Title 字串
於是在前端頁面使用以下的 javascript 程式:
var myCounter_URL = "http://www.mywishmemo.com/Demo.aspx";
myCounter_URL += "?Title="+escape(document.title);
window.location = myCounter_URL;
但在後端頁面中以 Request.Params.Get("Title") 取出後再印出來卻發現中文變成了亂碼..
上網查詢後找到以下解決方案...
解決方式文中提到了二個方式,
1.在 JSP 中可使用 new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); 的方式取回,但在 ASP.NET 中找不到相同的函式,所以先放棄此法
2.在前端使用二次 encodeURI(), 在後端程式中再以 URLDecode 還原,這個可行!
最後解決的程式碼如下:
前端:
var myCounter_URL = "http://www.mywishmemo.com/Demo.aspx";
myCounter_URL += "?Title="+encodeURI(encodeURI(document.title));
window.location = myCounter_URL;
後端:
string pageTitle = Request.Params.Get("Title");
pageTitle = HttpUtility.UrlDecode(pageTitle, System.Text.Encoding.UTF8);
另外在
這個頁面中則比解了 Javascript 裡面 escape, encodeURI, encodeURIComponent 三個函式的不同
使用 UTF 編碼後,若需要截斷字串以存入資料庫,
則要注意截斷的位置
UTF-8每個字元由 3 個字元組成
而使用 UrlEncode 後,每個字元又會變成 %ab 這樣的格式
所以一個中文字在編碼後會變成 9 個符號,例如 %e5%85%b6
以這個字串為例 : "由 IP 反查"
則編碼後會變成:+%e7%94%b1+IP+%e5%8f%8d%e6%9f%a5
可注意到空白的部份變成 + 號, 英文不變, 每個中文則對應為 9 個符號一組
截取時除了要確保 % 號之後一定要有 2 個字, 也要注意 % 的數量應為 3 的倍數