_HTML_named_entities2Unicode

    • Offizieller Beitrag

    Hier mal eine kleine Funktion zum umwandeln der von HTML stammenden "named entities" oder "benannte Zeichen" in Unicode-Zeichen.

    Spoiler anzeigen
    [autoit]


    $sText = 'Käse Äpfel Öl Überfall Füße 450€'
    $sText = _HTML_named_entities2Unicode($sText)
    ConsoleWrite($sText & @CR)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

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

    [/autoit]

    Edit: Den Tip von AspirinJunkie umgesetzt. Danke!

  • Nur so: man könnte knapp 500 Zeichen sparen wenn man das Präfix "&" und das Suffix ";" aus den Elementen herausgenommen hätte und unten nur einmal in die For-Schleife gesetzt hätte.
    Ansonsten: Schöne und nützliche Fleißarbeit ;)

    Edit: Hm merke gerade warum ich darauf gekommen bin: Ich hatte das selbst mal so umgesetzt (wandelt aber auch die numerischen Entitäten mit um):

    Spoiler anzeigen
    [autoit]

    Global $s_URL = "http://www.autoit.de"
    Global $s_Source = BinaryToString(InetRead($s_URL), 4)

    [/autoit] [autoit][/autoit] [autoit]

    _ConvertEntities($s_Source)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($s_Source)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    ; Dezimalform:
    $a_RegExp = StringRegExp($s_S, "&#(\d{2,4});", 3)
    If IsArray($a_RegExp) And Not @error Then
    For $i In $a_RegExp
    If Not $o_Dict.Exists("&#" & $i & ";") Then $o_Dict.Add("&#" & $i & ";", Number($i))
    Next
    EndIf
    ; Hexadezimalform:
    $a_RegExp = StringRegExp($s_S, "&#x([[:xdigit:]]{2,4});", 3)
    If IsArray($a_RegExp) And Not @error Then
    For $i In $a_RegExp
    If Not $o_Dict.Exists("&#x" & $i & ";") Then $o_Dict.Add("&#x" & $i & ";", Dec($i))
    Next
    EndIf
    ; Namensform:
    For $i = 0 To 252
    $s_T = "&" & $a_NameEnt[$i][0] & ";"
    If StringInStr($s_S, $s_T, 2) Then
    If Not $o_Dict.Exists($s_T) Then $o_Dict.Add($s_T, $a_NameEnt[$i][1])
    EndIf
    Next
    ; Ersetze die Codes durch ihr entsprechendes Zeichen:
    For $i In $o_Dict.Keys
    $s_S = StringReplace($s_S, $i, ChrW($o_Dict($i)))
    Next
    EndFunc ;==>_ConvertEntities

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (11. Oktober 2013 um 19:45)