none
HTML in Textbox (Sonderzeichen) RRS feed

  • Frage

  • Hallo,

    wie kann ich aus einem String das versteckt enthaltene Sonderzeichen:

                             "Sonderzeichen"

    vor Übergabe an eine Textbox entfernen?

    Hintergrund ist die Darstellung von HTML (enthält der oben genannte String)
    in einer MultiLine Textbox mit TinyMCE.


    Grüße aus Oberhausen

    Steffen 

    Mittwoch, 31. Oktober 2012 16:41

Antworten

  • Hallo zusammen,

    der Lösungsansatz:

    Dim alterText As String = "String mit Zeilenumbruch"
    Dim neuerText As String = alterText.Replace(vbCrLf , String.Empty)

    war der richtige Weg, aber...

    Dim alterText As String = String mit Zeilenumbruch"
    Dim neuerText As String = alterText.Replace(vbLf, String.Empty)

    brachte das gewünschte Ergebnis.


    Grüße und Danke für Eure Unterstützung,

    Steffen



    • Als Antwort markiert Steffen01 Donnerstag, 1. November 2012 11:10
    • Bearbeitet Steffen01 Donnerstag, 1. November 2012 11:27 Synatx
    Donnerstag, 1. November 2012 11:09

Alle Antworten

  • Hallo Steffen,

    bei dem Sonderzeichen handelt es sich um einen Zeilenumbruch. Du kannst die Replace-Methode des Strings verwenden:

    Dim alterText As String = "String mit Zeilenumbruch"
    Dim neuerText As String = alterText.Replace(vbCrLf, String.Empty)
    

    Gruß,

    LittleBlueBird

    • Als Antwort markiert Steffen01 Donnerstag, 1. November 2012 11:00
    • Tag als Antwort aufgehoben Steffen01 Donnerstag, 1. November 2012 11:10
    Mittwoch, 31. Oktober 2012 17:02
  • Hallo LittleBlueBird,

    vielen Dank für die schnelle Antwort.

    Leider hatte ich deinen Vorschlag bereits selbst ohne Erfolg versucht.
    Zum Testen kopiere ich den geänderten String in ein Worddokument
    und siehe da, das Zeichen ist immer noch da.

    Dieser Zeilenumbruch scheint sich besonders gut zu verstecken :-)


    Grüße,
    Steffen

    Mittwoch, 31. Oktober 2012 17:32
  • Hallo, ein Sonderzeichen ist in HTML ein <br/>. Wenn du es dekodierst, dann erhälst du ein vbCrLf. Es könnte jedoch auch ein vbCr oder ein vbLf sein, Windows kodiert es mit vbCrLf aber andere Systeme machen das nicht. Der Dekoder vom HTML sollte das aber eigentlich berücksichtigen, aber teste es mal vorsichtshalber.

    Wenn es natürlich nicht um HTML Dokumente geht, so kann es schon eher passieren das es ein "falsches" vb* wird.

    Ansonsten schicke mal so einen Ausschnitt wo noch so ein "versteckter" zeilenumbruch drin ist.


    Koopakiller - http://koopakiller.ko.ohost.de/

    Mittwoch, 31. Oktober 2012 17:41
  • Hallo Steffen,

    wie Koopakiller schon aufführte, ist in einem Html-String die Zeichenfolge "<br />" zu ersetzen. Ich habe auch Html-Dokumente gesehen, die als Zeilenumbruch "<br>" hatten.

    htmlText.Replace("<br />", String.Empty)

    oder

    htmlText.Replace("<br>", String.Empty)

    Schönen Gruß,

    LittleBlueBird

    Mittwoch, 31. Oktober 2012 17:58
  • Hallo LittleBlueBird,

    Hier der String (dein gewünschter Ausschnitt), den ich hier als HTML eingefügt habe:

    Dies ist ein Text

    mit einem Zeilenumbruch nach dem Wort "Text".

    Wenn du den obigen Text per COPY/Paste in WORD ablegst,
    siehst du die Sonderzeichen (bei entsprechender Einstellung
    in WORD).

    Und hier der String, wie er in der Datenbank hinterlegt ist:


    <p>Dies ist ein Text</p>
    <p>mit einem Zeilenumbruch nach dem Wort "Text".</p>



    Auch könnte man versuchsweise eine MuliLine Textbox anlegen und
    einen Text aus WORD per Copy/Paste hinein kopieren.

    Näturlich müsste der Text vorher in WORD mit ENTER einmal umge-
    brochen werden. Jetzt befinden sich die Zeichen für den Umbruch aus
    WORD auch in der Textbox. Und die gilt es zu entfernen.


    Grüße,
    Steffen

    • Bearbeitet Steffen01 Mittwoch, 31. Oktober 2012 19:00
    Mittwoch, 31. Oktober 2012 18:52
  • <p/> ist ein Paragraf, der hat natürlich einen Zeilenumbruch drinnen. Wir müssten mal wissen was du nun genau vor hast. wenn der HTML Code selbst Paragraphen enthält wird es natürlich schwieriger das alles Auszutauschen. Probiere mal Replace("</p", vbCrLf) das sollte dann einen Zeilenumbruch richtig interpretieren, wobei es sicher nicht die beste Variante ist, zumal es noch andere Tags wie <h1/> <h2/> usw. gibt bei denen auch Standartmäßig Zeilenumbrüche interpretiert werden.

    Koopakiller - http://koopakiller.ko.ohost.de/

    Mittwoch, 31. Oktober 2012 18:58
  • Hallo Koopakiller,

    das versteckte Sonderzeichen Sonderzeichen führt innerhalb meiner Programmierung
    dazu, dass die Daten der Textbox, leider ohne Fehlermeldung, nicht zugeführt
    werden und diese leer bleibt.

    Die Daten durchlaufen zuvor Webservices, Validierungen usw.
    Solang dieses Sonderzeichen nicht vorhanden sind funktioniert
    alles bestens.

    Grüße,
    Steffen
    Mittwoch, 31. Oktober 2012 19:15
  • Das Pilcrow Zeichen, welches Word als Textmarke für einen Zeilenumbruch nimmt ist ja nicht wirklich in deinem HTML Code. In folgendem Thread will auch jemand den Reintext von HTML bekommen:

    http://stackoverflow.com/questions/5870438/get-plain-text-from-html-in-net

    MSHTML scheint die ganzen Formatierungen zu entfernen und macht normale Zeilenumbrüche daraus. Die kannst du dann einfach per Replace ersetzen.

    Hinweis: Die Fehlende Assembly nennt sich Microsoft.mshtml das importieren von "mshtml" hat bei mir gereicht.

    Der Code vom MSHTML in VB.NET übersetzt:

    Imports mshtml
    
    Module Module1
    
        Sub Main()
            Dim htmldoc As New HTMLDocument()
            Dim htmldoc2 As IHTMLDocument2 = DirectCast(htmldoc, IHTMLDocument2)
            htmldoc2.write(New Object() {"<p>Plateau <i>of<i> <b>Leng</b><hr /><b erp=""arp"">2 sugars please</b> <xxx>what? &amp; who?"})
    
            Dim txt As String = htmldoc2.body.outerText
    
            Console.WriteLine(txt.Replace(vbCrLf, String.Empty))
    
        End Sub
    
    End Module

    Gleich mit der Entsprechenden Replace-Methode.


    Koopakiller - http://koopakiller.ko.ohost.de/


    Mittwoch, 31. Oktober 2012 19:31
  • Ich habe mir den Code vom MSHTML wie du ihn oben
    beschrieben hast gleich als Snippet hinterlegt. Dafür
    habe ich bestimmt noch Verwendung.

    Tja, nur ist die Bereinigung so gründlich, das sämtliche
    Tags ebenfalls eliminiert wurden und mir somit kein String
    mehr für die HTML Ausgabe zur Verfügung steht, sondern
    nur noch die puren Worte.

    Ergänzung:

    Falls jemand die mshtml nicht gleich importieren kann,
    sie befindet sich unter (Verweise / Verweise hinzufügen / Durchsuchen):

    C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll

    Grüße,
    Steffen

    Mittwoch, 31. Oktober 2012 20:21
  • Hallo zusammen,

    der Lösungsansatz:

    Dim alterText As String = "String mit Zeilenumbruch"
    Dim neuerText As String = alterText.Replace(vbCrLf , String.Empty)

    war der richtige Weg, aber...

    Dim alterText As String = String mit Zeilenumbruch"
    Dim neuerText As String = alterText.Replace(vbLf, String.Empty)

    brachte das gewünschte Ergebnis.


    Grüße und Danke für Eure Unterstützung,

    Steffen



    • Als Antwort markiert Steffen01 Donnerstag, 1. November 2012 11:10
    • Bearbeitet Steffen01 Donnerstag, 1. November 2012 11:27 Synatx
    Donnerstag, 1. November 2012 11:09