Search code examples
asp.netvb.nethtml-encode

How can I HTML-encode a string and use human-readable encoded tags (ex: ê instead of ê )


Greetings, I'm looking for a way to encode a string into HTML that uses human-readable tags such as ê (=ê). At the moment, I am using the HttpUtility.HtmlEncode() function, but it appears to return numbered tags instead of human-readable ones. For example:

Dim str as string = HttpUtility;HtmlEncode("vente - en-tête")
'Expected: vente - en-tête
'Actually received: vente - en-tête

Is there a setting or function in ASP.Net to encode a string into HTML resembling the first comment?

EDIT: I am looking for this kind of functionality because the text is saved HTML-encoded in the database. The text comes from a bunch of MS Word documents that have been converted to HTML.


Solution

  • Here's a function that does the job :

        public static string EntitiesEncode(string value)
        {
            if (string.IsNullOrEmpty(value)) return value;
    
            var entities = new Dictionary<int, string>();
            entities.Add(160, "nbsp");
            entities.Add(161, "iexcl");
            entities.Add(162, "cent");
            entities.Add(163, "pound");
            entities.Add(164, "curren");
            entities.Add(165, "yen");
            entities.Add(166, "brvbar");
            entities.Add(167, "sect");
            entities.Add(168, "uml");
            entities.Add(169, "copy");
            entities.Add(170, "ordf");
            entities.Add(171, "laquo");
            entities.Add(172, "not");
            entities.Add(173, "shy");
            entities.Add(174, "reg");
            entities.Add(175, "macr");
            entities.Add(176, "deg");
            entities.Add(177, "plusmn");
            entities.Add(178, "sup2");
            entities.Add(179, "sup3");
            entities.Add(180, "acute");
            entities.Add(181, "micro");
            entities.Add(182, "para");
            entities.Add(183, "middot");
            entities.Add(184, "cedil");
            entities.Add(185, "sup1");
            entities.Add(186, "ordm");
            entities.Add(187, "raquo");
            entities.Add(188, "frac14");
            entities.Add(189, "frac12");
            entities.Add(190, "frac34");
            entities.Add(191, "iquest");
            entities.Add(192, "Agrave");
            entities.Add(193, "Aacute");
            entities.Add(194, "Acirc");
            entities.Add(195, "Atilde");
            entities.Add(196, "Auml");
            entities.Add(197, "Aring");
            entities.Add(198, "AElig");
            entities.Add(199, "Ccedil");
            entities.Add(200, "Egrave");
            entities.Add(201, "Eacute");
            entities.Add(202, "Ecirc");
            entities.Add(203, "Euml");
            entities.Add(204, "Igrave");
            entities.Add(205, "Iacute");
            entities.Add(206, "Icirc");
            entities.Add(207, "Iuml");
            entities.Add(208, "ETH");
            entities.Add(209, "Ntilde");
            entities.Add(210, "Ograve");
            entities.Add(211, "Oacute");
            entities.Add(212, "Ocirc");
            entities.Add(213, "Otilde");
            entities.Add(214, "Ouml");
            entities.Add(215, "times");
            entities.Add(216, "Oslash");
            entities.Add(217, "Ugrave");
            entities.Add(218, "Uacute");
            entities.Add(219, "Ucirc");
            entities.Add(220, "Uuml");
            entities.Add(221, "Yacute");
            entities.Add(222, "THORN");
            entities.Add(223, "szlig");
            entities.Add(224, "agrave");
            entities.Add(225, "aacute");
            entities.Add(226, "acirc");
            entities.Add(227, "atilde");
            entities.Add(228, "auml");
            entities.Add(229, "aring");
            entities.Add(230, "aelig");
            entities.Add(231, "ccedil");
            entities.Add(232, "egrave");
            entities.Add(233, "eacute");
            entities.Add(234, "ecirc");
            entities.Add(235, "euml");
            entities.Add(236, "igrave");
            entities.Add(237, "iacute");
            entities.Add(238, "icirc");
            entities.Add(239, "iuml");
            entities.Add(240, "eth");
            entities.Add(241, "ntilde");
            entities.Add(242, "ograve");
            entities.Add(243, "oacute");
            entities.Add(244, "ocirc");
            entities.Add(245, "otilde");
            entities.Add(246, "ouml");
            entities.Add(247, "divide");
            entities.Add(248, "oslash");
            entities.Add(249, "ugrave");
            entities.Add(250, "uacute");
            entities.Add(251, "ucirc");
            entities.Add(252, "uuml");
            entities.Add(253, "yacute");
            entities.Add(254, "thorn");
            entities.Add(255, "yuml");
            entities.Add(402, "fnof");
            entities.Add(913, "Alpha");
            entities.Add(914, "Beta");
            entities.Add(915, "Gamma");
            entities.Add(916, "Delta");
            entities.Add(917, "Epsilon");
            entities.Add(918, "Zeta");
            entities.Add(919, "Eta");
            entities.Add(920, "Theta");
            entities.Add(921, "Iota");
            entities.Add(922, "Kappa");
            entities.Add(923, "Lambda");
            entities.Add(924, "Mu");
            entities.Add(925, "Nu");
            entities.Add(926, "Xi");
            entities.Add(927, "Omicron");
            entities.Add(928, "Pi");
            entities.Add(929, "Rho");
            entities.Add(931, "Sigma");
            entities.Add(932, "Tau");
            entities.Add(933, "Upsilon");
            entities.Add(934, "Phi");
            entities.Add(935, "Chi");
            entities.Add(936, "Psi");
            entities.Add(937, "Omega");
            entities.Add(945, "alpha");
            entities.Add(946, "beta");
            entities.Add(947, "gamma");
            entities.Add(948, "delta");
            entities.Add(949, "epsilon");
            entities.Add(950, "zeta");
            entities.Add(951, "eta");
            entities.Add(952, "theta");
            entities.Add(953, "iota");
            entities.Add(954, "kappa");
            entities.Add(955, "lambda");
            entities.Add(956, "mu");
            entities.Add(957, "nu");
            entities.Add(958, "xi");
            entities.Add(959, "omicron");
            entities.Add(960, "pi");
            entities.Add(961, "rho");
            entities.Add(962, "sigmaf");
            entities.Add(963, "sigma");
            entities.Add(964, "tau");
            entities.Add(965, "upsilon");
            entities.Add(966, "phi");
            entities.Add(967, "chi");
            entities.Add(968, "psi");
            entities.Add(969, "omega");
            entities.Add(977, "thetasym");
            entities.Add(978, "upsih");
            entities.Add(982, "piv");
            entities.Add(8226, "bull");
            entities.Add(8230, "hellip");
            entities.Add(8242, "prime");
            entities.Add(8243, "Prime");
            entities.Add(8254, "oline");
            entities.Add(8260, "frasl");
            entities.Add(8472, "weierp");
            entities.Add(8465, "image");
            entities.Add(8476, "real");
            entities.Add(8482, "trade");
            entities.Add(8501, "alefsym");
            entities.Add(8592, "larr");
            entities.Add(8593, "uarr");
            entities.Add(8594, "rarr");
            entities.Add(8595, "darr");
            entities.Add(8596, "harr");
            entities.Add(8629, "crarr");
            entities.Add(8656, "lArr");
            entities.Add(8657, "uArr");
            entities.Add(8658, "rArr");
            entities.Add(8659, "dArr");
            entities.Add(8660, "hArr");
            entities.Add(8704, "forall");
            entities.Add(8706, "part");
            entities.Add(8707, "exist");
            entities.Add(8709, "empty");
            entities.Add(8711, "nabla");
            entities.Add(8712, "isin");
            entities.Add(8713, "notin");
            entities.Add(8715, "ni");
            entities.Add(8719, "prod");
            entities.Add(8721, "sum");
            entities.Add(8722, "minus");
            entities.Add(8727, "lowast");
            entities.Add(8730, "radic");
            entities.Add(8733, "prop");
            entities.Add(8734, "infin");
            entities.Add(8736, "ang");
            entities.Add(8743, "and");
            entities.Add(8744, "or");
            entities.Add(8745, "cap");
            entities.Add(8746, "cup");
            entities.Add(8747, "int");
            entities.Add(8756, "there4");
            entities.Add(8764, "sim");
            entities.Add(8773, "cong");
            entities.Add(8776, "asymp");
            entities.Add(8800, "ne");
            entities.Add(8801, "equiv");
            entities.Add(8804, "le");
            entities.Add(8805, "ge");
            entities.Add(8834, "sub");
            entities.Add(8835, "sup");
            entities.Add(8836, "nsub");
            entities.Add(8838, "sube");
            entities.Add(8839, "supe");
            entities.Add(8853, "oplus");
            entities.Add(8855, "otimes");
            entities.Add(8869, "perp");
            entities.Add(8901, "sdot");
            entities.Add(8968, "lceil");
            entities.Add(8969, "rceil");
            entities.Add(8970, "lfloor");
            entities.Add(8971, "rfloor");
            entities.Add(9001, "lang");
            entities.Add(9002, "rang");
            entities.Add(9674, "loz");
            entities.Add(9824, "spades");
            entities.Add(9827, "clubs");
            entities.Add(9829, "hearts");
            entities.Add(9830, "diams");
            entities.Add(34, "quot");
            entities.Add(38, "amp");
            entities.Add(60, "lt");
            entities.Add(62, "gt");
            entities.Add(338, "OElig");
            entities.Add(339, "oelig");
            entities.Add(352, "Scaron");
            entities.Add(353, "scaron");
            entities.Add(376, "Yuml");
            entities.Add(710, "circ");
            entities.Add(732, "tilde");
            entities.Add(8194, "ensp");
            entities.Add(8195, "emsp");
            entities.Add(8201, "thinsp");
            entities.Add(8204, "zwnj");
            entities.Add(8205, "zwj");
            entities.Add(8206, "lrm");
            entities.Add(8207, "rlm");
            entities.Add(8211, "ndash");
            entities.Add(8212, "mdash");
            entities.Add(8216, "lsquo");
            entities.Add(8217, "rsquo");
            entities.Add(8218, "sbquo");
            entities.Add(8220, "ldquo");
            entities.Add(8221, "rdquo");
            entities.Add(8222, "bdquo");
            entities.Add(8225, "dagger");
            entities.Add(8224, "Dagger");
            entities.Add(8240, "permil");
            entities.Add(8249, "lsaquo");
            entities.Add(8250, "rsaquo");
            entities.Add(8364, "euro");
    
            StringBuilder builder = new StringBuilder();
    
            foreach (var item in value)
            {
                var key = (int)item;
    
                if (entities.ContainsKey(key))
                {
                    builder.Append('&');
                    builder.Append(entities[key]);
                    builder.Append(';');
                }
                else if (key >= 160)
                {
                    builder.Append("&#");
                    builder.Append(key.ToString(CultureInfo.InvariantCulture));
                    builder.Append(';');
                }
                else builder.Append(item);
            }
            return builder.ToString();
        }
    

    EDIT : seems you are using VB so here is the VB version :

    Public Function EntitiesEncode(ByVal value As String) As String
        If String.IsNullOrEmpty(value) Then
            Return value
        End If
    
        Dim entities = New Dictionary(Of Integer, String)()
        entities.Add(160, "nbsp")
        entities.Add(161, "iexcl")
        entities.Add(162, "cent")
        entities.Add(163, "pound")
        entities.Add(164, "curren")
        entities.Add(165, "yen")
        entities.Add(166, "brvbar")
        entities.Add(167, "sect")
        entities.Add(168, "uml")
        entities.Add(169, "copy")
        entities.Add(170, "ordf")
        entities.Add(171, "laquo")
        entities.Add(172, "not")
        entities.Add(173, "shy")
        entities.Add(174, "reg")
        entities.Add(175, "macr")
        entities.Add(176, "deg")
        entities.Add(177, "plusmn")
        entities.Add(178, "sup2")
        entities.Add(179, "sup3")
        entities.Add(180, "acute")
        entities.Add(181, "micro")
        entities.Add(182, "para")
        entities.Add(183, "middot")
        entities.Add(184, "cedil")
        entities.Add(185, "sup1")
        entities.Add(186, "ordm")
        entities.Add(187, "raquo")
        entities.Add(188, "frac14")
        entities.Add(189, "frac12")
        entities.Add(190, "frac34")
        entities.Add(191, "iquest")
        entities.Add(192, "Agrave")
        entities.Add(193, "Aacute")
        entities.Add(194, "Acirc")
        entities.Add(195, "Atilde")
        entities.Add(196, "Auml")
        entities.Add(197, "Aring")
        entities.Add(198, "AElig")
        entities.Add(199, "Ccedil")
        entities.Add(200, "Egrave")
        entities.Add(201, "Eacute")
        entities.Add(202, "Ecirc")
        entities.Add(203, "Euml")
        entities.Add(204, "Igrave")
        entities.Add(205, "Iacute")
        entities.Add(206, "Icirc")
        entities.Add(207, "Iuml")
        entities.Add(208, "ETH")
        entities.Add(209, "Ntilde")
        entities.Add(210, "Ograve")
        entities.Add(211, "Oacute")
        entities.Add(212, "Ocirc")
        entities.Add(213, "Otilde")
        entities.Add(214, "Ouml")
        entities.Add(215, "times")
        entities.Add(216, "Oslash")
        entities.Add(217, "Ugrave")
        entities.Add(218, "Uacute")
        entities.Add(219, "Ucirc")
        entities.Add(220, "Uuml")
        entities.Add(221, "Yacute")
        entities.Add(222, "THORN")
        entities.Add(223, "szlig")
        entities.Add(224, "agrave")
        entities.Add(225, "aacute")
        entities.Add(226, "acirc")
        entities.Add(227, "atilde")
        entities.Add(228, "auml")
        entities.Add(229, "aring")
        entities.Add(230, "aelig")
        entities.Add(231, "ccedil")
        entities.Add(232, "egrave")
        entities.Add(233, "eacute")
        entities.Add(234, "ecirc")
        entities.Add(235, "euml")
        entities.Add(236, "igrave")
        entities.Add(237, "iacute")
        entities.Add(238, "icirc")
        entities.Add(239, "iuml")
        entities.Add(240, "eth")
        entities.Add(241, "ntilde")
        entities.Add(242, "ograve")
        entities.Add(243, "oacute")
        entities.Add(244, "ocirc")
        entities.Add(245, "otilde")
        entities.Add(246, "ouml")
        entities.Add(247, "divide")
        entities.Add(248, "oslash")
        entities.Add(249, "ugrave")
        entities.Add(250, "uacute")
        entities.Add(251, "ucirc")
        entities.Add(252, "uuml")
        entities.Add(253, "yacute")
        entities.Add(254, "thorn")
        entities.Add(255, "yuml")
        entities.Add(402, "fnof")
        entities.Add(913, "Alpha")
        entities.Add(914, "Beta")
        entities.Add(915, "Gamma")
        entities.Add(916, "Delta")
        entities.Add(917, "Epsilon")
        entities.Add(918, "Zeta")
        entities.Add(919, "Eta")
        entities.Add(920, "Theta")
        entities.Add(921, "Iota")
        entities.Add(922, "Kappa")
        entities.Add(923, "Lambda")
        entities.Add(924, "Mu")
        entities.Add(925, "Nu")
        entities.Add(926, "Xi")
        entities.Add(927, "Omicron")
        entities.Add(928, "Pi")
        entities.Add(929, "Rho")
        entities.Add(931, "Sigma")
        entities.Add(932, "Tau")
        entities.Add(933, "Upsilon")
        entities.Add(934, "Phi")
        entities.Add(935, "Chi")
        entities.Add(936, "Psi")
        entities.Add(937, "Omega")
        entities.Add(945, "alpha")
        entities.Add(946, "beta")
        entities.Add(947, "gamma")
        entities.Add(948, "delta")
        entities.Add(949, "epsilon")
        entities.Add(950, "zeta")
        entities.Add(951, "eta")
        entities.Add(952, "theta")
        entities.Add(953, "iota")
        entities.Add(954, "kappa")
        entities.Add(955, "lambda")
        entities.Add(956, "mu")
        entities.Add(957, "nu")
        entities.Add(958, "xi")
        entities.Add(959, "omicron")
        entities.Add(960, "pi")
        entities.Add(961, "rho")
        entities.Add(962, "sigmaf")
        entities.Add(963, "sigma")
        entities.Add(964, "tau")
        entities.Add(965, "upsilon")
        entities.Add(966, "phi")
        entities.Add(967, "chi")
        entities.Add(968, "psi")
        entities.Add(969, "omega")
        entities.Add(977, "thetasym")
        entities.Add(978, "upsih")
        entities.Add(982, "piv")
        entities.Add(8226, "bull")
        entities.Add(8230, "hellip")
        entities.Add(8242, "prime")
        entities.Add(8243, "Prime")
        entities.Add(8254, "oline")
        entities.Add(8260, "frasl")
        entities.Add(8472, "weierp")
        entities.Add(8465, "image")
        entities.Add(8476, "real")
        entities.Add(8482, "trade")
        entities.Add(8501, "alefsym")
        entities.Add(8592, "larr")
        entities.Add(8593, "uarr")
        entities.Add(8594, "rarr")
        entities.Add(8595, "darr")
        entities.Add(8596, "harr")
        entities.Add(8629, "crarr")
        entities.Add(8656, "lArr")
        entities.Add(8657, "uArr")
        entities.Add(8658, "rArr")
        entities.Add(8659, "dArr")
        entities.Add(8660, "hArr")
        entities.Add(8704, "forall")
        entities.Add(8706, "part")
        entities.Add(8707, "exist")
        entities.Add(8709, "empty")
        entities.Add(8711, "nabla")
        entities.Add(8712, "isin")
        entities.Add(8713, "notin")
        entities.Add(8715, "ni")
        entities.Add(8719, "prod")
        entities.Add(8721, "sum")
        entities.Add(8722, "minus")
        entities.Add(8727, "lowast")
        entities.Add(8730, "radic")
        entities.Add(8733, "prop")
        entities.Add(8734, "infin")
        entities.Add(8736, "ang")
        entities.Add(8743, "and")
        entities.Add(8744, "or")
        entities.Add(8745, "cap")
        entities.Add(8746, "cup")
        entities.Add(8747, "int")
        entities.Add(8756, "there4")
        entities.Add(8764, "sim")
        entities.Add(8773, "cong")
        entities.Add(8776, "asymp")
        entities.Add(8800, "ne")
        entities.Add(8801, "equiv")
        entities.Add(8804, "le")
        entities.Add(8805, "ge")
        entities.Add(8834, "sub")
        entities.Add(8835, "sup")
        entities.Add(8836, "nsub")
        entities.Add(8838, "sube")
        entities.Add(8839, "supe")
        entities.Add(8853, "oplus")
        entities.Add(8855, "otimes")
        entities.Add(8869, "perp")
        entities.Add(8901, "sdot")
        entities.Add(8968, "lceil")
        entities.Add(8969, "rceil")
        entities.Add(8970, "lfloor")
        entities.Add(8971, "rfloor")
        entities.Add(9001, "lang")
        entities.Add(9002, "rang")
        entities.Add(9674, "loz")
        entities.Add(9824, "spades")
        entities.Add(9827, "clubs")
        entities.Add(9829, "hearts")
        entities.Add(9830, "diams")
        entities.Add(34, "quot")
        entities.Add(38, "amp")
        entities.Add(60, "lt")
        entities.Add(62, "gt")
        entities.Add(338, "OElig")
        entities.Add(339, "oelig")
        entities.Add(352, "Scaron")
        entities.Add(353, "scaron")
        entities.Add(376, "Yuml")
        entities.Add(710, "circ")
        entities.Add(732, "tilde")
        entities.Add(8194, "ensp")
        entities.Add(8195, "emsp")
        entities.Add(8201, "thinsp")
        entities.Add(8204, "zwnj")
        entities.Add(8205, "zwj")
        entities.Add(8206, "lrm")
        entities.Add(8207, "rlm")
        entities.Add(8211, "ndash")
        entities.Add(8212, "mdash")
        entities.Add(8216, "lsquo")
        entities.Add(8217, "rsquo")
        entities.Add(8218, "sbquo")
        entities.Add(8220, "ldquo")
        entities.Add(8221, "rdquo")
        entities.Add(8222, "bdquo")
        entities.Add(8225, "dagger")
        entities.Add(8224, "Dagger")
        entities.Add(8240, "permil")
        entities.Add(8249, "lsaquo")
        entities.Add(8250, "rsaquo")
        entities.Add(8364, "euro")
    
        Dim builder As New StringBuilder()
    
        For Each item In value
            Dim key = AscW(item)
    
            If entities.ContainsKey(key) Then
                builder.Append("&"c)
                builder.Append(entities(key))
                builder.Append(";"c)
            ElseIf key >= 160 Then
                builder.Append("&#")
                builder.Append(key.ToString(CultureInfo.InvariantCulture))
                builder.Append(";"c)
            Else
                builder.Append(item)
            End If
        Next
        Return builder.ToString()
    End Function