2010-12-19 19 views
1

Also schreibe ich ein PHP-Skript, das in einer CSS-Datei liest, dann die Kommentare und tatsächlichen CSS in separaten Arrays. Das Skript erstellt dann eine Seite mit CSS und Kommentaren, die alle gut formatiert sind.Testen für einen Backslash in einer Zeichenfolge

Die grundlegende Logik für das Skript ist dies:

  • liest in einer neuen Zeile
  • Wenn es mit einem Schrägstrich beginnt oder endet mit einem Öffnungswinkel, setzte einen Bool für CSS oder Kommentare true
  • diese Zeile an die entsprechende Element in dem entsprechenden Array in
  • Wenn das letzte Zeichen einer umgekehrten Schrägstrich (Ende eines Kommentars) oder die ersteistCharakter ist ein Schließbügel (Ende eines CSS-Tag), stellen notwendig Bool falsch
  • Spülen, wiederholen

Wenn jemand einen Fehler in das sieht, fühlen sich frei, es zu zeigen, aber ich denke, es sollte tun, was ich will.

Der schwierige Teil ist die letzte if-Anweisung, die überprüft, ob das letzte Zeichen ein umgekehrter Schrägstrich ist. Jetzt habe ich:

if ($line{(strlen($line) - 3)} == "\\") {do stuff} 

wo $ Zeile ist die letzte Zeile aus der Datei eingelesen. Ich bin mir nicht ganz sicher, warum ich 3 Zeichen zurückgeben muss, aber ich vermute, dass es am Ende jeder Zeichenfolge eine neue Zeile gibt, wenn man sie aus einer Datei einliest. Diese if-Anweisung ist jedoch niemals wahr, obwohl es definitiv Zeilen gibt, die mit Schrägstrichen enden. Diese

gibt sogar einen Backslash zurück, aber die if-Anweisung wird nie ausgelöst.

+0

Haben Sie versucht, der neuen Zeile vor der Schleife ein paar Zeichen hinzuzufügen? – Adam

+0

Können Sie näher erläutern, was Sie meinen? Ich habe $ line überprüft, und es enthält definitiv eine Zeichenfolge, wenn es getestet wird. – mcritelli

+0

Sie können "\ r \ n", "\ r" oder "\ n" Zeilenenden haben. – aib

Antwort

0

Das wäre, weil $ line {(strlen ($ zeile) - 3)} in Ihrer if-Anweisung einen Backslash zurückgibt, während die if-Anweisung nach zwei sucht. Versuchen Sie mit

substr($line, -2) 

statt. (Möglicherweise müssen Sie es in -3 ändern. Der Grund dafür ist, dass das Zeilenende-Zeichen am Ende der Zeichenfolge enthalten sein könnte.)

+0

Muss der Backslash nicht maskiert werden? Ich dachte, die if-Anweisung würde eigentlich nur einen Schrägstrich, nicht zwei, testen. – mcritelli

+0

Hmm, ich entschuldige mich. Daran habe ich nicht gedacht. In diesem Fall bin ich mir nicht sicher, was schief läuft, aber ich denke immer noch, dass substr in diesem Fall eine bessere Route wäre. – parent5446

+0

Ich versuchte auch eine Teilzeichenfolge, und es gibt einen umgekehrten Schrägstrich zurück, aber die if-Anweisung schlägt immer noch fehl. Ich bin jedoch zu einer wichtigen Erkenntnis gekommen - Kommentare schließen mit einem Schrägstrich, nicht mit einem Backslash. Problem (ein bisschen) gelöst! – mcritelli

0

@mcritelli: CSS-Kommentare aussehen wie /* comment */ obwohl, also nur nach einem suchen Backslash wird Ihnen nicht sagen, ob es den Kommentar beginnt oder beendet. Hier ist ein sehr einfaches Skript, das ich getestet habe und das am Anfang und am Ende eines Kommentars eine Schleife durchläuft -

Verwandte Themen