Verbesserungsvorschläge? zu oft StringRegExpReplace

  • Hi,
    ich schreibe/verbessere zur Zeit mein erstes Script, mit Internet-Funktionen.

    Momentan sitze ich an einem Punkt, bei dem ich einen Link bereinigen möchte.
    Das habe ich im ersten Anlauf mit StringRegExpReplace versucht:

    [autoit]

    ;~ Beispiel:
    ;~ http\u00253A\u00252F\u00252Fvideo.ak.fbcdn.net\u00252Fcfs-ak-ash1\u00252F12345\u00252F123\u00252F12345678901234567_12345.mp4\u00253Foh\u00253D123456789012345678901234567890123\u002526oe\u00253D12345678\u002526__gda__\u00253D1234567890_12345678901234567890123456789012
    $link1 = StringRegExpReplace($facebookdaten[0],"u00253A",":")
    $link2 = StringRegExpReplace($link1,"u00252F","/")
    $link3 = StringRegExpReplace($link2,"u00253F","?")
    $link4 = StringRegExpReplace($link3,"u00253D","=")
    $link5 = StringRegExpReplace($link4,"u002526","&")
    $facebookvideo = StringRegExpReplace($link5,"\\","")

    [/autoit]

    Irgendwie gefällt mir dieser Abschnitt aber überhaupt nicht.
    Weil es viel zu viele Zeilen für so eine kleine Aufgabe sind.

    Habt ihr bitte einen Vorschlag, wie man das verbessern könnte?


    Gruß
    Nasenbär

    Einmal editiert, zuletzt von Nasenbär (11. Februar 2011 um 20:23)

  • Sowas?:

    Spoiler anzeigen
    [autoit]

    Global $aRepl[6][2] = [["u00253A",":"], ["u00252F","/"], ["u00253F","?"], ["u00253D","="], ["u002526","&"], ["\\",""]]

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

    $String = "http\u00253A\u00252F\u00252Fvideo.ak.fbcdn.net\u00252Fcfs-ak-ash1\u00252F12345\u00252F123\u00252F12345678901234567_12345.mp4\u00253Foh\u00253D123456789012345678901234567890123\u002526oe\u00253D12345678\u002526__gda__\u00253D1234567890_12345678901234567890123456789012"

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

    For $i = 0 To UBound($aRepl) - 1
    $String = StringReplace($String, $aRepl[$i][0], $aRepl[$i][1])
    Next

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

    ConsoleWrite($String & @CRLF)

    [/autoit]
  • Danke für das Beispiel!
    Ich habe mir das mal angesehen wie der Code mit dem Array geschrieben wurde, evtl. kann ich das auch gebrauchen.
    Dabei ist mir aufgefallen, dass im Code doch der Backslash fehlt! Müßte doch dann aber so gehen oder:

    [autoit]

    Global $aRepl[6][2] = [["\u00253A",":"], ["\u00252F","/"], ["\u00253F","?"], ["\u00253D","="], ["\u002526","&"], ["\\",""]]

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

    $String = "http\u00253A\u00252F\u00252Fvideo.ak.fbcdn.net\u00252Fcfs-ak-ash1\u00252F12345\u00252F123\u00252F12345678901234567_12345.mp4\u00253Foh\u00253D123456789012345678901234567890123\u002526oe\u00253D12345678\u002526__gda__\u00253D1234567890_12345678901234567890123456789012"

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

    For $i = 0 To UBound($aRepl) - 1
    $String = StringReplace($String, $aRepl[$i][0], $aRepl[$i][1])
    Next

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

    MsgBox(0, "Umgeänderter URL-String ...", $String)

    [/autoit]
  • Ich würde es so machen...

    [autoit]

    $sString = "http\u00253A\u00252F\u00252Fvideo.ak.fbcdn.net\u00252Fcfs-ak-ash1\u00252F12345\u00252F123\u00252F12345678901234567_12345.mp4\u00253Foh\u00253D123456789012345678901234567890123\u002526oe\u00253D12345678\u002526__gda__\u00253D1234567890_12345678901234567890123456789012"

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

    $aHexUnicode = StringRegExp($sString, "\\u([0-9ABCDEF]{6})", 3)
    For $i = 0 To UBound($aHexUnicode) - 1
    $sString = StringReplace($sString, "\u" & $aHexUnicode[$i], ChrW("0x" & StringLeft($aHexUnicode[$i], 2) & StringRight($aHexUnicode[$i], 2)))
    Next
    MsgBox(64, "New String", $sString)

    [/autoit]