WebUtility.HtmlDecode replacement in .NET Core

C#.Netasp.net Coreasp.net Core-Mvc

C# Problem Overview


I need to decode HTML characters in .NET Core (MVC6). It looks like .NET Core doesn't have WebUtility.HtmlDecode function which everybody used for that purpose before. Is there a replacement exist in .NET Core?

C# Solutions


Solution 1 - C#

This is in the System.Net.WebUtility class (Since .NET Standard 1.0) :

//
// Summary:
//     Provides methods for encoding and decoding URLs when processing Web requests.
public static class WebUtility
{
    public static string HtmlDecode(string value);
    public static string HtmlEncode(string value);
    public static string UrlDecode(string encodedValue);
    public static byte[] UrlDecodeToBytes(byte[] encodedValue, int offset, int count);
    public static string UrlEncode(string value);
    public static byte[] UrlEncodeToBytes(byte[] value, int offset, int count);
}

Solution 2 - C#

This is in Net Core 2.0

using System.Text.Encodings.Web;

and call it:

$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(link)}'>clicking here</a>.");

UPDATE: Also in .Net Core 2.1:

using System.Web;

HttpUtility.UrlEncode(code)
HttpUtility.UrlDecode(code)

UPDATE: Also works from .NET Core 3.1 up to .NET 5 and .NET 6.

Solution 3 - C#

I've found the HtmlDecode function in the WebUtility library to work.

System.Net.WebUtility.HtmlDecode(string)

Solution 4 - C#

You need add reference System.Net.WebUtility.

  • It's already included in .Net Core 2 (Microsoft.AspNetCore.All)

  • Or you can install from NuGet - preview version for .Net Core 1.

So example, your code will be look like the below

public static string HtmlDecode(this string value)
{
     value = System.Net.WebUtility.HtmlDecode(value);
     return value;
}

Solution 5 - C#

namespace System.Web
{
    //
    // Summary:
    //     Provides methods for encoding and decoding URLs when processing Web requests.
    //     This class cannot be inherited.
    public sealed class HttpUtility
    {
        public HttpUtility();
        public static string HtmlAttributeEncode(string s);
        public static void HtmlAttributeEncode(string s, TextWriter output); 
        public static string HtmlDecode(string s);
        public static void HtmlDecode(string s, TextWriter output);
        public static string HtmlEncode(string s);
        public static string HtmlEncode(object value);
        public static void HtmlEncode(string s, TextWriter output);
        public static string JavaScriptStringEncode(string value);
        public static string JavaScriptStringEncode(string value, bool addDoubleQuotes);
        public static NameValueCollection ParseQueryString(string query);
        public static NameValueCollection ParseQueryString(string query, Encoding encoding);
        public static string UrlDecode(string str, Encoding e);
        public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e);
        public static string UrlDecode(string str);
        public static string UrlDecode(byte[] bytes, Encoding e);
        public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count);
        public static byte[] UrlDecodeToBytes(string str, Encoding e);
        public static byte[] UrlDecodeToBytes(byte[] bytes);
        public static byte[] UrlDecodeToBytes(string str);
        public static string UrlEncode(string str);
        public static string UrlEncode(string str, Encoding e);
        public static string UrlEncode(byte[] bytes);
        public static string UrlEncode(byte[] bytes, int offset, int count);
        public static byte[] UrlEncodeToBytes(string str);
        public static byte[] UrlEncodeToBytes(byte[] bytes);
        public static byte[] UrlEncodeToBytes(string str, Encoding e);
        public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count);
        [Obsolete("This method produces non-standards-compliant output and has interoperability issues. The preferred alternative is UrlEncode(String).")]
        public static string UrlEncodeUnicode(string str);
        [Obsolete("This method produces non-standards-compliant output and has interoperability issues. The preferred alternative is UrlEncodeToBytes(String).")]
        public static byte[] UrlEncodeUnicodeToBytes(string str);
        public static string UrlPathEncode(string str);
    }
}

You can use HttpUtility class in .net core for decoding or encoding.

hope it will work.

Solution 6 - C#

HtmlDecode and most of the *Decode methods were not ported to CoreFx. Only the *Encode methods are available.

Here's what's available today: https://github.com/dotnet/corefx/blob/1dfe38aeb2811fbbd6d4de36d210f060e80d50a6/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/HtmlEncoder.cs

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsibvicView Question on Stackoverflow
Solution 1 - C#Scott DormanView Answer on Stackoverflow
Solution 2 - C#Gerardo Buenrostro GonzálezView Answer on Stackoverflow
Solution 3 - C#pipdingView Answer on Stackoverflow
Solution 4 - C#Nguyễn TopView Answer on Stackoverflow
Solution 5 - C#user11441779View Answer on Stackoverflow
Solution 6 - C#Victor HurdugaciView Answer on Stackoverflow