從昨天祐陞說Safari的問題,今天一整天都在改程式碼,一直到了下班回家吃晚飯還遠端繼續改,囧。我一定是人怪怪的,都下班了還在做事,而且還是拿NB來寫code,多麼不好寫。


由於在Windows作業系統上得Safari,網頁傳遞中文參數的時候,似乎不支援UrlEnc(Unicode)的編碼格式,所以後來都要改成UrlEnc(UTF-8),金靠北。

這可是非常浩大的工程,而且花了那麼多時間,能夠服務到多少使用者,一般在Windows OS上得使用者,大多還是用IE跟Firefox,不然就算是用Google Chrome好了,也沒這問題(Opera沒有裝來測試..Orz),竟然要為了這麼小眾的需求,來花費我這麼多的腦力跟精力。

不過靠腰歸靠腰,還是乖乖的改code,原本就asp.net的話比較好改,因為有找到可以編碼成UrlEnc(UTF-8)的方法。

ASP.NET (VBScript):
字串轉UrlEnc(UTF-8)編碼
  HttpUtility.UrlEncode(String, Encoding.UTF8)
example:
  Dim word = "文"
  Dim utf8 = HttpUtility.UrlEncode(word , Encoding.UTF8)

如果是16進位的Unicode,也沒關係
先把16進位轉10進位
  Integer.Parse(16進位, System.Globalization.NumberStyles.HexNumber)
再把10進位轉文字
  ChrW(Integer)
接著再把文字利用上面的方法轉換(怎麼感覺步驟很白痴,沒有更快的嗎?)
example:
  Dim unicode = "6587"
  Dim hex2decimal = Integer.Parse(unicode , System.Globalization.NumberStyles.HexNumber)
Dim word = ChrW(hex2decimal)
Dim utf8 = HttpUtility.UrlEncode(word , Encoding.UTF8)
or
  Dim unicode = "6587"
  Dim utf8 = HttpUtility.UrlEncode(ChrW(Integer.Parse(unicode , System.Globalization.NumberStyles.HexNumber)), Encoding.UTF8)


另外JavaScript的情況是
原本用escape()來編碼中文字串
現在都要改成encodeURI()encodeURIComponent()
這兩個的差別嘛,應該是有些字元encodeURI不做編碼,要改用encodeURIComponent來編碼,如下:
Note: The encodeURI() function encodes special characters, with the exception of: , / ? : @ & = + $ #.
Use the encodeURIComponent() function to encode these characters.

創作者介紹

每天都有新鮮事

soarlin 發表在 痞客邦 PIXNET 留言(0) 人氣()