2012年8月9日 星期四

[Asp].中文網域 doamain name (Punycode)

客戶反應一個問題, 要提供一個 URL在網頁裡, 由於包含中文字, 所以中文字被被編碼了.

要連到 URL:

https://law.全國法規.tw/

編修存檔後,透過 IE 瀏覽器, URL 點下去後變成(無法顯示網頁), 神奇的 google  chrome 可以連!

全國法規, UTF-8 編碼做 URLEncode 如下, IE 不能連.
https://law.%E5%85%A8%E5%9C%8B%E6%B3%95%E8%A6%8F.tw/

全國法規, Big5 編碼做 URLEncode 如下, IE 不能連.
https://law.%A5%FE%B0%EA%AAk%B3W.tw/

https://law.%A5%FE%B0%EA%AA%6B%B3%57.tw/


查了一下, 原來中文網域名要轉成 punycode 才行,
隨手下載了一個 ASP 版的轉換程式.
Punycode / IDN conversion code for classic ASP
http://www.simpledns.com/outbox/idn-convert-asp.zip

剛好遇到 "規" 這個字在使用 ASCW( ) 函數是會變成負數. 會出問題, trace 一下程式碼, 改改修修, 弄不出來, 正確解答應該轉換成:
https://law.xn--15q40leqvqi0a.tw/

可是我跑出來的結果有出入, 15q40l 變成 15q50l 實是在很無言, 又看不懂程式在做什麼. 於是改用 .net 來解決. 隨手寫了一個 .net 的 COM+. 最後當然是 Encode 轉換成功, 測試用的程式碼如下:



如果您的 IE 想讓 URL 從 Punycode 的符號變成中文字的話, 需要這樣子設定.





相關文章:
如何利用 IE 或 Firefox 查詢中文域名轉碼(Punycode)
http://blog.miniasp.com/post/2011/07/07/How-to-use-IE-and-Firefox-query-Punycode.aspx

Punycode
http://anferneehardaway.pixnet.net/blog/post/4946513-punycode

[Asp] Server.URLEncode 和 encodeURIComponent 的差別
http://maxtellyou.blogspot.tw/2012/07/asp-serverurlencode-encodeuricomponent.html


使用ASP呼叫C#寫的COM元件
http://maxtellyou.blogspot.tw/2012/03/aspccom.html

如何用 C# 開發的 DLL 讓 VB6 可以使用
http://smilelight-tw.blogspot.tw/2011/06/c-dll-vb6.html

沒有留言:

張貼留言

Facebook 留言板