peter: Reguläre Ausdrücke - Alles außerhalb von Tags finden

Hallo,

habe Text, der auch Link-Tags enthalten kann.
Nun möchte ich mit regulären Ausdrücken alles finden, was außerhalb dieser Tags steht, um darauf htmlentities() anzuwenden.
Jemand eine Idee, wie ich da rangehe?

gruß
peter

  1. Nun möchte ich mit regulären Ausdrücken alles finden, was außerhalb dieser Tags steht, um darauf htmlentities() anzuwenden.

    Die Sinnhaftigkeit erschließt sich mit zwar nicht ganz, aber bitte.

    Jemand eine Idee, wie ich da rangehe?

    preg_replace ist sicher vernünftig.

    "Beliebige Zeichenkette (1)" gefolgt von "<link" gefolgt von "beliebige Zeichenkette (2)" gefolgt von "> bzw />" gefolgt von weiterer "beliebiger Zeichenkette (3)"

    1 und 3 behandelst du mit htmlentities() und baust die Sache wieder zusammen - den e-Modifikator nicht vergessen.

  2. Du müßtest idealerweise eine Regexp mit callback verwenden:

    1. '>' vorne an string anfügen
    2. >([^<]+) -> match im Callback durch htmlentities schicken
    3. '>' vorne wieder abschneiden

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Du müßtest idealerweise eine Regexp mit callback verwenden:

      1. '>' vorne an string anfügen
      2. ([^<]+) -> match im Callback durch htmlentities schicken

      3. '>' vorne wieder abschneiden

      Gruß, LX

      Da muß ich mir noch ein paar Gedanken machen wie ichs handhabe wenn kein Link vorkommt, aber der Ansatz gefällt mir richtig gut.

      Gruß
      peter

      1. Wenn kein Link vorkommt, funktioniert der Ansatz durch das vorangestellte > ganz genauso. Alles außerhalb von HTML-Tags wird umgewandelt - das sollte es doch, oder? Natürlich besteht noch das Problem, dass innerhalb des Textes theoretisch auch > in mathematischen Gleichungen vorkommen könnte - das müßte dann schon vorher korrekt kodiert werden, aber das kann man evtl. anderweitig abfangen.

        Gruß, LX

        --
        RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
        RFC 1925, Satz 11a: Siehe Regel 6a
  3. habe Text, der auch Link-Tags enthalten kann.
    Nun möchte ich mit regulären Ausdrücken alles finden, was außerhalb dieser Tags steht, um darauf htmlentities() anzuwenden.

    htmlentities sollte man heute nur noch sehr ausnahmsweise anwenden[1].
    Vorher ist zu prüfen, ob die geeignete Encoding/Charset-Angabe nicht das Problem vollständig lösen kann.
    Das beste Encoding/Charset ist gewiss UTF-8.
    Einfach die Quellen im entsprechendend encodiert speichern.

    [1] Falls du Inhalt in einem Encoding einliest, das du nicht selbst bestimmen kannst (Ressource von anderer domain). Aber auch hier ist UTF-8 vorausgesetzt, über die Programmierung eine Umkodierung der externen Daten möglich über entsprechende Filter beim I/O.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hi,

      htmlentities sollte man heute nur noch sehr ausnahmsweise anwenden[1].
      Vorher ist zu prüfen, ob die geeignete Encoding/Charset-Angabe nicht das Problem vollständig lösen kann.
      Das beste Encoding/Charset ist gewiss UTF-8.
      Einfach die Quellen im entsprechendend encodiert speichern.

      Ja, soll mit der Zeit alles mal Richtung UTF8 gehen.
      Die Daten kommen aber aus einer Datenbank, da is alles noch ISO.
      Will nicht alles in ISO weitermachen nur weil die Daten aus der DB so rüberkommen.

      Gruß
      peter

      1. Die Daten kommen aber aus einer Datenbank, da is alles noch ISO.

        utf8_encode() kennst du aber schon?

        bzw warum konvertierst du die Datenbank nicht einfach? wenn "alles" in derselben Kodierung vorliegt, ist das Kinderfasching.