首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 字串與 HTML 十進制實體編碼互轉完整實作指南

     編輯:ASP.NET 基礎

在 ASP.NET 開發中,經常需要將字串轉換為 HTML 十進制實體編碼(&#數字; 格式),或將已編碼的字串還原為原始文字。這種編碼方式將每個字元轉換為其對應的 Unicode 碼位(十進制數值),並在前後加上 &# 與 ;,瀏覽器會自動解析並顯示為原始字元,適用於防止 XSS 攻擊、安全傳輸特殊字元等場景。

核心轉換邏輯

編碼時逐字元取得 Unicode 碼位,解碼時使用正則表達式匹配 &#(\d+); 模式並還原字元。以下提供完整的 C# 實作類別,包含編碼、解碼與測試方法:

using System;
using System.Text.RegularExpressions;

public partial class StringHtmlEncoder : System.Web.UI.Page
{
    /// 
    /// 將字串轉為 HTML 十進制實體編碼 (&#碼位;)
    /// 
    /// 待編碼的字串
    /// 編碼後的字串
    public string EncodeToHtmlEntities(string input)
    {
        if (string.IsNullOrEmpty(input) || input.Trim() == "")
            return "";

        var result = new System.Text.StringBuilder();
        foreach (char c in input)
        {
            result.Append("&#").Append(((int)c).ToString()).Append(";");
        }
        return result.ToString();
    }

    /// 
    /// 正則匹配評估器:將 &#數字; 還原為字元
    /// 
    private string MatchEvaluator(Match m)
    {
        int codePoint = int.Parse(m.Groups[1].Value);
        return ((char)codePoint).ToString();
    }

    /// 
    /// 將 HTML 十進制實體編碼還原為原始字串
    /// 
    /// 已編碼的字串
    /// 解碼後的原始字串
    public string DecodeFromHtmlEntities(string encoded)
    {
        if (string.IsNullOrEmpty(encoded) || encoded.Trim() == "")
            return "";

        var regex = new Regex(@"&#(\d+);", RegexOptions.Compiled);
        return regex.Replace(encoded, MatchEvaluator);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        string test = "ASP.NET 實體編碼測試";
        string encoded = EncodeToHtmlEntities(test);
        Response.Write("編碼結果:" + encoded + "
"); string decoded = DecodeFromHtmlEntities(encoded); Response.Write("解碼結果:" + decoded); } }

JavaScript 版本參考實作

前端同樣可實現雙向轉換,適合在客戶端處理編碼/解碼:

// 解碼:將 &#數字; 或 &#x十六進制; 轉為字元
function decodeHtmlEntities(str) {
    return str.replace(/&#(x)?([^&]{1,5});?/g, function (match, isHex, code) {
        return String.fromCharCode(parseInt(code, isHex ? 16 : 10));
    });
}

// 編碼:將字串轉為 &#十進制; 格式
function encodeToHtmlEntities(str) {
    var codes = [];
    for (var i = 0; i < str.length; i++) {
        codes[i] = str.charCodeAt(i);
    }
    return "&#" + codes.join(";&#") + ";";
}

應用場景與注意事項

  • 資料庫儲存:將含特殊符號的內容編碼後存入資料庫,避免編碼衝突。
  • 跨系統傳輸:在不同編碼環境間傳遞中文等非 ASCII 字元時,實體編碼可確保內容完整。
  • 防 XSS:輸出使用者輸入內容前先編碼,可有效防止腳本注入。
  • 效能考量:大量字串處理建議使用 StringBuilder 而非字串串接。

圖示範例:

編碼轉換示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved