[REGEX] HTML in CSV

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] HTML in CSV

    Guten Abend,

    ich sitze nun schon seit ein paar Stunden und noch mehr Stunden google, weil ich dachte, das Problem muss doch schonmal jemand gehabt haben, aber bisher vergeblich.

    Ich habe also eine (momentan 80MB, kann aber noch viel größer werden) CSV Datei in folgendem Format:
    Code:
    spalte1;spalte2;spalte3;"<html>
    <head>
    blabla
    </head>
    <body>
    <a href=\"index.php\">Linktitel</a>
    <script>
    variable1 = \"wert1\";
    </body>";spalte5;spalte6
    zeile2Spalte1;zeile2Spalte2;
    und so weiter. Das Ganze möchte ich nun möglichst in ein array bzw. im Endeffekt in eine Datenbank packen.
    Normale CSV Funktionen kann ich nicht nutzen, weil es nicht in einer Zeile steht. Also muss ein regex her. Dann müssen escapede Anführungszeichen und Samikola innerhalb von Anführungszeichen "ignoriert" werden.


    Also bisher hab ich das hier, aber da kommt nur Müll raus:
    Code:
     preg_match_all('§([^"])*;|(\"(((?<=\\\\)\")|[^"])*(?<!\\\\)\")§imsU', $csvdata, $matches);
    (ja, das [code] Tag is Absicht, das PHP Tag klaut Backslashes...)
    Alle anderen Ansätze kommen mir mit timeout (300 seconds) oder sonstige Fehler...
    Hier gabs auch noch 'nen interessanten Ansatz:
    http://www.programmersheaven.com/use...SV-with-regex/

    Aber da wird leider nicht berücksichtigt, dass man die Zeichen escapen kann.

    Jemand 'ne Idee?
    Zuletzt geändert von DarkRoot; 11.12.2008, 18:10.

  • #2
    Wieso gehts nicht mit CSV-Funktionen?

    Kommentar


    • #3
      Re: [REGEX] HTML in CSV

      Original geschrieben von DarkRoot
      Normale CSV Funktionen kann ich nicht nutzen, weil es nicht in einer Zeile steht.
      Dürfte kein Problem sein. Ich habe mich auch gerade mit CSV beschäftigt, allerdings die andere Richtung, also aus DB -> CSV. Und Zeilenumbrüche innerhalb der "Zellen" sind kein Problem.

      Siehe auch: http://tools.ietf.org/html/rfc4180
      6. Fields containing line breaks (CRLF), double quotes, and commas
      should be enclosed in double-quotes.
      Und das ist ja bei Dir der Fall.

      Vielleicht ist ja der Backslash für die " im HTML das Problem. Die werden normalerweise auch mit einem weiteren " escaped. Diesen Parameter kann man bei fgetcsv nicht angeben, wie es aussieht.
      7. If double-quotes are used to enclose fields, then a double-quote
      appearing inside a field must be escaped by preceding it with
      another double quote. For example:

      "aaa","b""bb","ccc"

      Kommentar


      • #4
        Ouch.
        Ich hätte es einfach mal ausprobieren sollen.
        Ging blind davon aus, dass der das innerhalb der Anführungszeichen auch als mehrzeilig ansieht.
        Das \" => "" Problem lässt sich ja mit 'nem einfachen replace lösen.
        Das Array sieht so aus, wie ich es haben wollte. Vielen Dank!

        Kommentar

        Lädt...
        X