跳至頁尾內容
.NET幫助

C# URL 編碼(對於開發者的運行原理)

URL 編碼和解碼是 C# 中用於確保資料在 URL 中安全傳輸的技術。 在 C# 中,這些操作通常在處理 Web 應用、API 呼叫或任何需要安全和可靠地通過互聯網傳遞資料的情境中遇到。 在本文中,我們將探討 URL 編碼方法和IronPDF 程式庫

C# 中的 URL 編碼

當您編碼 URL 時,您將其字元轉變為可以安全地通過互聯網傳送的形式,避免任何誤解。 這是因為 URL 僅能使用 ASCII 字元集通過互聯網傳輸。 不屬於此集合或在 URL 中具有特別含義的字元(如空格、& 和 = 符號),需要使用百分比編碼來表示(例如,空格變為 %20)。 C# 提供了內建的方法來完成此任務。

C# 中的 URL 解碼

URL 解碼將編碼的字元在到達目的地時轉換回到其原始狀態。 這對於接收應用正確理解和處理資料至關重要。 解碼將百分比編碼的字元轉回原來的符號,使資料再次可讀和可用。

C# 中的編碼方法

在 C# 中,有多種方法可以執行 URL 編碼,每種方法適合不同的情境。 這些方法主要在 System.WebSystem.Net 命名空間內提供,為開發者如何編碼 URL 提供靈活性。 以下是可用方法的簡要概述:

  1. HttpUtility.UrlEncode 方法 (System.Web): 這也許是在 Web 應用中最常用的 URL 編碼方法。 它將字元轉換為百分比編碼格式,讓字串可安全地在 URL 上傳輸。 在 ASP.NET 項目中,它特別有用於編碼查詢字串和表單參數。
  2. HttpUtility.UrlPathEncode 方法 (System.Web):UrlEncode 不同,UrlPathEncode 是專為編碼 URL 的路徑部分設計的,保留查詢字串不變。 重要的是要注意此方法不編碼整個 URL 而是路徑部分,確保 URL 的層次結構不被破壞。
  3. Uri.EscapeUriString 方法 (System): 此方法旨在轉變不允許在 URI 中的字元,將其轉換為百分比編碼的等價物。 然而,它不會編碼某些字元,如斜杠 (/) 和問號 (?),因為它們被認為是有效的 URI 字元。
  4. Uri.EscapeDataString 方法 (System): 此方法旨在將字串編碼以用於 URI 的查詢部分。 它編碼所有字元,除了 RFC 3986 中定義的未保留字元。它比 EscapeUriString 更苛刻,確保資料安全地編碼後在 URL 中傳輸。

讓我們通過理解其程式碼範例來了解上述的前三種編碼方法及其運作方式。

HttpUtility.UrlEncode 方法程式碼範例

using System;
using System.Web;

class Program
{
    static void Main()
    {
        string originalPath = "/api/search/Hello World!";
        string encodedPath = UrlEncode(originalPath);

        Console.WriteLine("Original Path: " + originalPath);
        Console.WriteLine("Encoded Path: " + encodedPath);
    }

    public static string UrlEncode(string originalString)
    {
        return HttpUtility.UrlEncode(originalString);
    }
}
using System;
using System.Web;

class Program
{
    static void Main()
    {
        string originalPath = "/api/search/Hello World!";
        string encodedPath = UrlEncode(originalPath);

        Console.WriteLine("Original Path: " + originalPath);
        Console.WriteLine("Encoded Path: " + encodedPath);
    }

    public static string UrlEncode(string originalString)
    {
        return HttpUtility.UrlEncode(originalString);
    }
}
Imports System
Imports System.Web

Friend Class Program
	Shared Sub Main()
		Dim originalPath As String = "/api/search/Hello World!"
		Dim encodedPath As String = UrlEncode(originalPath)

		Console.WriteLine("Original Path: " & originalPath)
		Console.WriteLine("Encoded Path: " & encodedPath)
	End Sub

	Public Shared Function UrlEncode(ByVal originalString As String) As String
		Return HttpUtility.UrlEncode(originalString)
	End Function
End Class
$vbLabelText   $csharpLabel

命名空間包含: System.Web 命名空間在程式碼的開始包括進來。

原始字串: 我們定義了一個字串變數 originalString,包含要編碼以在 URL 中安全傳輸的字元。 這包括可能在 URL 中未編碼時引起問題的空格和標點符號。

編碼: 調用 HttpUtility.UrlEncode 方法並以 originalString 作為參數。 此方法處理字串並返回一個新字串,其中不安全字元已被百分比編碼的等價物替換。 例如,空格被替換為 %20

輸出: 最後,程式輸出原始和編碼過的字串到控制台。

C# URL 編碼(開發者如何工作):圖 1 - 控制台輸出顯示原始和編碼過的字串

HttpUtility.UrlPathEncode 方法程式碼範例

using System;
using System.Web;

class Program
{
    static void Main()
    {
        // Define the original URL path, which includes spaces.
        string originalPath = "/api/search/Hello World!";

        // Use the HttpUtility.UrlPathEncode method to encode the path.
        string encodedPath = HttpUtility.UrlPathEncode(originalPath);

        // Output the original and encoded paths to the console.
        Console.WriteLine("Original Path: " + originalPath);
        Console.WriteLine("Encoded Path: " + encodedPath);
    }
}
using System;
using System.Web;

class Program
{
    static void Main()
    {
        // Define the original URL path, which includes spaces.
        string originalPath = "/api/search/Hello World!";

        // Use the HttpUtility.UrlPathEncode method to encode the path.
        string encodedPath = HttpUtility.UrlPathEncode(originalPath);

        // Output the original and encoded paths to the console.
        Console.WriteLine("Original Path: " + originalPath);
        Console.WriteLine("Encoded Path: " + encodedPath);
    }
}
Imports System
Imports System.Web

Friend Class Program
	Shared Sub Main()
		' Define the original URL path, which includes spaces.
		Dim originalPath As String = "/api/search/Hello World!"

		' Use the HttpUtility.UrlPathEncode method to encode the path.
		Dim encodedPath As String = HttpUtility.UrlPathEncode(originalPath)

		' Output the original and encoded paths to the console.
		Console.WriteLine("Original Path: " & originalPath)
		Console.WriteLine("Encoded Path: " & encodedPath)
	End Sub
End Class
$vbLabelText   $csharpLabel

URL 編碼中的字元實體等價物: 該過程顯示將 URL 路徑的字串值轉變,將空格轉為其字元實體等價物(%20)以達到網頁相容。 這很重要,因為 URL 不能包含實際的空格字元。

字串值和 URL 字串處理: 變數 originalPath 的字串值是 "/api/search/Hello World!" ,這是需要編碼的 URL 字串的典型例子,因為它包含空格。

儘管該例子使用了一個沒有方法重載的特定版本的 HttpUtility.UrlPathEncode,但重要的是要注意該方法的設計目的是編碼 URL 路徑。 開發人員應注意方法重載何時存在,因為它們提供了不同的方式使用方法,常常通過接受不同型別的輸入或提供額外的功能。

編碼物件和字串 URL 轉變: 在此上下文中,編碼物件在 HttpUtility.UrlPathEncode 方法的操作中是隱含的,該方法接受一個字串 URL 並返回其編碼形式。 此方法確保在編碼特殊字元以符號表示時,URL 路徑的結構保持不變。

編碼路徑輸出: 該程式展示了從原始路徑到編碼路徑的轉變。 這是編碼字串 URL 適應網頁傳輸的直接例子,解決空格和其它特殊字元可能帶來的潛在問題。

C# URL 編碼(開發者如何工作):圖 2 - 控制台輸出顯示原始和編碼過的字串

Uri.EscapeUriString 方法程式碼範例

using System;

class Program
{
    static void Main()
    {
        string originalUri = "https://example.com/search?query=Hello World!";
        string escapedUri = Uri.EscapeUriString(originalUri);

        Console.WriteLine("Original URI: " + originalUri);
        Console.WriteLine("Escaped URI: " + escapedUri);
    }
}
using System;

class Program
{
    static void Main()
    {
        string originalUri = "https://example.com/search?query=Hello World!";
        string escapedUri = Uri.EscapeUriString(originalUri);

        Console.WriteLine("Original URI: " + originalUri);
        Console.WriteLine("Escaped URI: " + escapedUri);
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim originalUri As String = "https://example.com/search?query=Hello World!"
		Dim escapedUri As String = Uri.EscapeUriString(originalUri)

		Console.WriteLine("Original URI: " & originalUri)
		Console.WriteLine("Escaped URI: " & escapedUri)
	End Sub
End Class
$vbLabelText   $csharpLabel

原始 URI: 變數 originalUri 初始化為一個字串,表示完整的 URI,包括帶空格和特殊字元的查詢字串。 為確保 URI 被網頁瀏覽器和伺服器正確處理,這些特殊字元需要"逃脫"。

逃脫 URI: 調用 Uri.EscapeUriString 方法並以 originalUri 作為參數。 該方法掃描 URI 字串並逃脫不允許出現或可能在 URI 中引起歧義的字元。

輸出: 該程式輸出原始和逃脫的 URI 到控制台。

C# URL 編碼(開發者如何工作):圖 3 - 控制台輸出顯示原始和編碼過的字串

IronPDF:C# PDF 程式庫

C# URL 編碼(開發者如何工作):圖 4 - IronPDF 網頁

IronPDF 是一個 PDF 程式庫,能夠簡化在 .NET 應用中建立、編輯和操作 PDF 文件。 設計為能無縫整合入 C# 和 VB.NET,IronPDF 提供開發者通過從 HTML 生成 PDF或從文字直接生成 PDF 的功能。 無論您是需要自動化開具發票、建立動態報告,或在 .NET 環境中管理文件,IronPDF 因其易用性和全面的功能集而脫穎而出。

IronPDF的亮點是其從 HTML 轉換為 PDF的功能,保持您的佈局和樣式。 這允許從網頁內容建立 PDF,非常適合用於報告、發票和文件。 HTML 文件、URL 及 HTML 字串可以輕易轉為 PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

使用 URL 編碼的工作程式碼範例

在接下來的例子中,我們將看到如何將 IronPDF 與 URL 編碼結合使用,從網頁生成 PDF。 這個場景涉及編碼一個 URL 以確保其正確格式化以進行網頁請求,然後使用 IronPDF 將該 URL 的內容轉換成 PDF 文件。

安裝 IronPDF 程式庫

首先,確保您已在項目中安裝 IronPDF。 如果您使用的是 NuGet 套件管理器,可以通過運行以下命令來安裝:

Install-Package IronPdf

程式碼範例

現在,讓我們深入研究程式碼:

using System.Web;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your IronPDF license key
        string baseUrl = "https://example.com/search";

        // The query parameter with spaces that needs to be encoded
        string query = "Hello World!";

        // Encoding the query parameter to ensure the URL is correctly formatted
        string encodedQuery = HttpUtility.UrlEncode(query);

        // Constructing the full URL with the encoded query parameter
        string fullUrl = $"{baseUrl}?query={encodedQuery}";

        // Initialize the IronPDF HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Convert the web page at the encoded URL to a PDF document
        var pdf = renderer.RenderUrlAsPdf(fullUrl);

        // Save the PDF to a file
        string filePath = "webpage.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
using System.Web;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key"; // Set your IronPDF license key
        string baseUrl = "https://example.com/search";

        // The query parameter with spaces that needs to be encoded
        string query = "Hello World!";

        // Encoding the query parameter to ensure the URL is correctly formatted
        string encodedQuery = HttpUtility.UrlEncode(query);

        // Constructing the full URL with the encoded query parameter
        string fullUrl = $"{baseUrl}?query={encodedQuery}";

        // Initialize the IronPDF HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Convert the web page at the encoded URL to a PDF document
        var pdf = renderer.RenderUrlAsPdf(fullUrl);

        // Save the PDF to a file
        string filePath = "webpage.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
Imports System.Web
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key" ' Set your IronPDF license key
		Dim baseUrl As String = "https://example.com/search"

		' The query parameter with spaces that needs to be encoded
		Dim query As String = "Hello World!"

		' Encoding the query parameter to ensure the URL is correctly formatted
		Dim encodedQuery As String = HttpUtility.UrlEncode(query)

		' Constructing the full URL with the encoded query parameter
		Dim fullUrl As String = $"{baseUrl}?query={encodedQuery}"

		' Initialize the IronPDF HtmlToPdf renderer
		Dim renderer = New ChromePdfRenderer()

		' Convert the web page at the encoded URL to a PDF document
		Dim pdf = renderer.RenderUrlAsPdf(fullUrl)

		' Save the PDF to a file
		Dim filePath As String = "webpage.pdf"
		pdf.SaveAs(filePath)

		Console.WriteLine($"PDF successfully created from: {fullUrl}")
		Console.WriteLine($"Saved to: {filePath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

C# URL 編碼(開發者如何工作):圖 5 - 控制台輸出成功將 URL 轉換為 PDF

程式碼說明

範例從含有空格的基本 URL 和查詢字串開始。 為確保它能安全地在 URL 中傳輸,查詢字串使用 HttpUtility.UrlEncode 進行編碼。 在編碼查詢之後,它會附加到基本 URL 上形成完整的 URL,以便存取。

當完整編碼的 URL 準備好後,IronPDF 的 ChromePdfRenderer 用來獲取該 URL 的網頁並將其轉換為 PDF 文件。 這需要建立一個 ChromePdfRenderer 類的實例,然後調用 RenderUrlAsPdf 使用編碼的 URL。 最後,生成的 PDF 使用 SaveAs 方法保存到文件中。 結果文件是可通過編碼 URL 存取的網頁內容的 PDF 文件。 這是輸出 PDF 文件:

C# URL 編碼(開發者如何工作):圖 6 - 來自 URL 的輸出 PDF

結論

C# URL 編碼(開發者如何工作):圖 7 - IronPDF 授權頁

綜上所述,C# 提供了強大的 URL 編碼和解碼能力,確保資料可以安全且高效地通過互聯網傳輸。 通過 System.Web 和 System.Net 命名空間內的內建方法,開發者可以編碼 URL 以防止特殊字元問題,並解碼它們回到原始形式以準確解釋資料。

對於有興趣探索IronPDF 試用授權提供的人,它們提供了一個親身評估其功能的機會。 如果您決定將 IronPDF 整合到您的項目中,授權從 $999 起,提供全面的功能套件以滿足您的 PDF 操作需求在 .NET 平台內。

常見問題

我可以如何在C#中編碼一個URL?

在C#中,您可以使用HttpUtility.UrlEncodeUri.EscapeDataString等方法來編碼URL。 這些方法將字元轉換為百分比編碼格式,以確保通過互聯網安全傳輸。

URL編碼和解碼之間有什麼區別?

URL編碼將特殊字元轉換為百分比編碼格式,以確保在URLs中的安全資料傳輸,而解碼則將這些編碼字元轉換回其原始形式,以便正確解釋資料。

如何使用C#從URL建立PDF?

您可以使用IronPDF將URL轉換為C#中的PDF。 IronPDF允許您直接捕獲網頁內容並將其轉換為PDF文件,整合URL編碼技術以確保準確的網路請求。

為什麼URL編碼在web apps中如此重要?

URL編碼在web apps中至關重要,因為它確保在URL中傳遞的資料安全且無錯誤。它將不安全的字元替換為百分比編碼格式,防止潛在的資料損壞或安全問題。

URL編碼如何用於增強C#中的PDF生成?

在生成PDF之前應用URL編碼,您可以確保包含在文件中的任何URL均格式正確且安全傳輸。像IronPDF這樣的庫可以在將web內容轉換為PDF時準確處理這些URL。

C#中有哪些方法可用於URL解碼?

C#提供諸如HttpUtility.UrlDecodeUri.UnescapeDataString的方法進行URL解碼。 這些方法逆轉編碼過程,將百分比編碼字元轉換回其原始形式。

URL編碼如何促進API調用?

URL編碼確保查詢參數中的特殊字元安全傳輸,防止API調用過程中出錯。這對於在web apps中可靠地在客戶端和伺服器之間傳遞資料至關重要。

IronPDF能否在生成PDF時自動處理URL編碼?

是的,IronPDF可以在將網頁轉換為PDF時自動處理URL編碼。它確保在PDF生成過程中URL格式正確且被解析,從而與web內容無縫整合。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話