2012年7月19日 星期四

[Asp] Server.URLEncode 和 encodeURIComponent 的差別

一般的情況下, 透過URL 傳遞參數, 在asp 裡只需要把要傳的變數內容透過 Server.URLEncode 就解決了, 但如果是要讓 ASP 和 javascript 同時都可以存取的話, 最好的解決方法是透過 aspEncodeURIComponent() 來解決.

以 "遺產" 這個中文字來說,
1. 在 Big5 的網頁,裡, 直接按下 submit 傳到  action 的網址, 會變成 "%BF%F2%B2%A3",
2.  Big5 的程式碼透過 Server.UrlEncode() 會產生成 "%BF%F2%B2%A3"
3.  Utf-8 的程式碼透過 Server.UrlEncode() 會產生成 "%E9%81%BA%E7%94%A2"
4. 在 Big5 的程式碼透過  aspEncodeURIComponent()  會產生成 "%E9%81%BA%E7%94%A2"
5. 在網頁裡透過 javascript 的 encodeURIComponent() 會產生成 "%25E9%2581%25BA%25E7%2594%25A2"


說明: 把 %25 視為 %, 就可以看的出來encodeURIComponent() 是產生成utf-8 編碼.




為什麼需要轉換編碼? 因為客戶的網站是 Big5 編碼, 他使用了 google site search 功能, google site search 如果是直接存取 URL 裡的變數, 有可能需要把變數存成 utf-8 編碼來讓 javascript 做處理.




附上 Asp 的 aspEncodeURIComponent 副程式:

Function aspEncodeURIComponent(sStr)
    aspEncodeURIComponent = myEncodeURIComponent(sStr)
%>
<script language="javascript" type="text/javascript" runat="server">
  function myEncodeURIComponent(sStr){
      return encodeURIComponent(sStr);
  }
</script>
<%
End Function



相關文章:
JavaScript 的 encodeURIComponent() 會將字串轉換成 UTF-8 編碼
http://blog.longwin.com.tw/2010/01/javascript-encodeuri-component-utf-8-2010/


沒有留言:

張貼留言

Facebook 留言板