在 .NET 開發中,有時需要在 C# 程式碼裡直接使用 JavaScript 的編碼函式(如 escape、unescape、encodeURI 等),或是處理 URL 參數的加密解密。本文將詳細說明如何在 .NET 中引用 JScript 執行這些操作,並整理 JavaScript 常見編解碼函式的差異與適用場景。
若要在 C# 專案中呼叫 escape、unescape 等 JScript 函式,需先加入 Microsoft.JScript 組件參考。隨後即可透過 Microsoft.JScript.GlobalObject 存取這些全域函式:
// 加入參考:Microsoft.JScript
using Microsoft.JScript;
// 範例:編碼中文字串
string strEscaped = GlobalObject.escape("測試打");
// 結果:%u6E2C%u8A66%u6253
// 同理可用 unescape、encodeURI、decodeURI 等
string strUnescaped = GlobalObject.unescape(strEscaped);
string strEncoded = GlobalObject.encodeURI("測試打");
注意: JScript.NET 將所有全域函式集中在 GlobalObject 類別下,使用時務必加上此前綴。
針對一般 URL 參數解碼,ASP.NET 提供了更直接的方法:
// 使用 HttpServerUtility.UrlDecode
string decoded = Server.UrlDecode(encodedString);
此方法適用於表單提交、QueryString 等常見情境,無需額外引用 JScript 組件。
JavaScript 提供三組編解碼函式,編碼範圍與用途各異:
| 函式 | 編碼範圍 | 典型用途 |
|---|---|---|
escape / unescape | ASCII 字母、數字、@ * _ + - . / 以外的所有字元(含 Unicode) | 早期版本常用,現已不建議在新專案使用 |
encodeURI / decodeURI | 除保留字元(; , / ? : @ & = + $ #)與未轉義字元外的所有字元 | 編碼完整 URL(含協定、域名、路徑) |
encodeURIComponent / decodeURIComponent | 除字母、數字、( ) . ! ~ * ' - _ 外的所有字元 | 編碼單一 URL 參數值,防止特殊字元(如 #、&)截斷參數 |
encodeURIComponent,確保參數值中的特殊字元(#、&、= 等)不會干擾 URL 結構。encodeURI,保留 URL 結構所需的保留字元。escape(但建議改用 encodeURIComponent)。escape 對 U+0100 以上字元輸出 %uXXXX 格式;其他兩組則統一輸出 UTF-8 多位元組序列(%XX%XX...)。.NET 開發者可透過 Microsoft.JScript.GlobalObject 直接複用 JavaScript 編碼邏輯,亦可善用 Server.UrlDecode 等內建方法。實務上,掌握 encodeURIComponent(參數)、encodeURI(完整 URL)的分工,能有效避免 URL 截斷、參數污染等常見錯誤。