Snippet Name: HTML_Entity_Decoder_Function
Tags:
Created Date: 2025-06-16 13:12:40
Last Modified Date: 2025-05-31 10:32:16
Dependencies:
DBA Notes:
Sample Output:
Title: HTML Entity Decoder Function
Author: user
in SQL Server 2019 , can you help me build a function that converts all htmp entities like "'" to their ascii equivalent
Author: ChatGPT
Absolutely! Here???s a SQL Server 2019 scalar function that will help you convert common **HTML entities** (like `'`, `&`, `<`, `>`, `"`, etc.) into their **ASCII equivalents**.
We will use `REPLACE()` calls inside the function, as T-SQL does not have built-in HTML decoding like some programming languages.
Here???s the function:
```sql
CREATE FUNCTION dbo.fn_HtmlDecode (@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
-- Replace common HTML entities with their ASCII equivalents
SET @input = REPLACE(@input, ''', '''')
SET @input = REPLACE(@input, '"', '"')
SET @input = REPLACE(@input, '>', '>')
SET @input = REPLACE(@input, '&lt;', '<')
SET @input = REPLACE(@input, '&amp;', '&')
SET @input = REPLACE(@input, '&#39;', '''') -- numeric code for apostrophe
SET @input = REPLACE(@input, '&#34;', '"') -- numeric code for quote
-- You can add more replacements as needed
RETURN @input
END
GO
```
### Example usage
```sql
SELECT dbo.fn_HtmlDecode('This &quot;book&quot; costs &amp;#39;10&amp;#39; dollars &amp; is great.')
```
Expected result:
```
This "book" costs '10' dollars & is great.
```
---
### Notes:
??? You can extend this function by adding more entities if needed (just follow the same `REPLACE` pattern).
??? This covers the **most common entities** that appear in HTML.
??? This function is lightweight and easy to apply in queries or views.
If you want, let me know and I can also help write:
- A **table-valued function** for batch processing rows
- A **CLR function** (if you want full HTML decoding like in .NET)
- Or an **inline query** example using this function.
Would you like me to include more entities or write those other options? Let me know!
Author: user
i need to convert all elements, not just common ones
Author: ChatGPT
Great ??? thanks for clarifying!
SQL Server by itself **doesn???t have a built-in function to decode *all* HTML entities** like `&euro;`, `&#169;`, or `&#x1F600;`. But you have two possible approaches:
---
### ???? **Option 1: Expand the REPLACE list**
You can **expand the T-SQL function** to include more named and numeric entities by manually adding them to the `REPLACE()` chain.
For example:
```sql
SET @input = REPLACE(@input, '&euro;', '???')
SET @input = REPLACE(@input, '&copy;', '??')
SET @input = REPLACE(@input, '&#169;', '??')
SET @input = REPLACE(@input, '&#x1F600;', '????') -- grinning face emoji
```
This works, but it becomes **huge and hard to maintain** as the list of HTML entities is long (~2500+).
---
### ???? **Option 2: Use SQL CLR with .NET**
A **much better solution** is to create a SQL CLR function and use the .NET **`System.Web.HttpUtility.HtmlDecode()`** method, which can decode **all known HTML entities automatically**.
Here???s how you can do that.
---
### ??? Example: SQL CLR function to decode all HTML entities
1?????? **Enable CLR integration**
```sql
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
```
---
2?????? **Create a .NET assembly**
You will need to compile this simple C# code as a DLL:
```csharp
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Web;
public class HtmlDecoder
{
&#91;SqlFunction]
public static SqlString HtmlDecode(SqlString input)
{
if (input.IsNull)
return SqlString.Null;
return new SqlString(HttpUtility.HtmlDecode(input.Value));
}
}
```
---
3?????? **Deploy the assembly to SQL Server**
Example:
```sql
CREATE ASSEMBLY HtmlDecodeAssembly
FROM 'C:\Path\To\HtmlDecode.dll'
WITH PERMISSION_SET = SAFE;
GO
```
---
4?????? **Create the SQL function**
```sql
CREATE FUNCTION dbo.fn_HtmlDecode (@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS EXTERNAL NAME HtmlDecodeAssembly.&#91;HtmlDecoder].&#91;HtmlDecode];
GO
```
---
5?????? **Use it in your queries**
```sql
SELECT dbo.fn_HtmlDecode('Tom &amp; Jerry &euro; &lt;tag&gt; &#169;')
```
Expected result:
```
Tom & Jerry ??? <tag> ??
```
---
### ???? Summary of options
| Option | Pros | Cons |
|--------------------|-------------------------------------|----------------------------------------|
| Expand REPLACE | Simple, stays inside T-SQL | Only handles the entities you manually add |
| SQL CLR + .NET | Handles all entities automatically | Needs .NET assembly, CLR enabled, deploy step |
---
### ???? Bonus: Want me to prepare:
??? The full `.cs` file
??? A ready-to-use DLL for deployment
??? A T-SQL deployment script
If yes, just say **???Yes, prepare the CLR package???** ??? I???ll build it out for you! ????