php: Ersetzen doppelt br / mit / pp

8

Ich benutze NicEdit, um RTF-Daten in mein CMS zu schreiben. Das Problem ist, dass es Strings wie folgt generiert:

%Vor%

da dies für eine Nachrichtenseite ist, bevorzuge ich den endgültigen html wie folgt:

%Vor%

Also meine derzeitige Lösung ist dies:

  1. Ich muss die $ Daten für <br /> am Anfang / Ende der Zeichenfolge
  2. abschneiden
  3. Ersetze alle Strings, die 2 <br/> oder mehr haben mit </p><p> (ein einzelnes <br /> ist erlaubt).
  4. schließlich, fügen Sie <p> am Anfang und </p> am Ende
  5. hinzu

Ich habe bisher nur die Schritte 1 und 3. kann mir jemand bei Schritt 2 helfen?

%Vor%

Danke!

ps: Es wäre sogar besser, bestimmte Situationen zu vermeiden. Beispiel: " hello<br /><br /><br /><br /><br />too much space " - diese 5 Bruchkanten sollten auch in nur eine " </p><p> "

umgewandelt werden

endgültige Lösung (Besonderer Dank an kemp!)

%Vor%     
andufo 02.06.2010, 16:43
quelle

3 Antworten

13

Dies funktioniert auch dann, wenn sich die beiden <br> s in verschiedenen Zeilen befinden (d. h. es gibt eine neue Zeile oder Leerzeichen dazwischen):

%Vor%     
Matteo Riva 02.06.2010, 17:13
quelle
2

Dieser Ansatz löst Ihr Problem:

  1. Teilen Sie die Zeichenfolge in <br> oder <br /> : Sie erhalten ein Array von Strings.
  2. Erstellen Sie eine neue Zeichenfolge <p> .
  3. Schleife auf dem Array von 1, vom Anfang bis zum Ende und entferne alle Einträge, die leer sind, bis ein Eintrag, der nicht leer ist (Pause).
  4. Wie 3, aber vom Ende bis zum Anfang des Arrays.
  5. Schleife auf dem Array von 1, haben einen ganzzahligen Wert A (Standard 0), der besagt, dass es eine einzelne oder doppelte Pause gibt.
    1. Wenn die Zeichenfolge leer ist, erhöhen Sie den Wert von A und weiter die Schleife.
    2. Wenn die Zeichenfolge nicht leer ist:
      1. Wenn der Wert von A 1 oder darunter ist, fügen Sie eine <br> .
      2. hinzu
      3. Wenn der Wert von A 2 oder höher ist, fügen Sie ein </p><p> .
      4. hinzu
    3. Fügen Sie den Inhalt des aktuellen Eintrags hinzu (der nicht leer ist).
    4. Setzen Sie den Wert von A auf 0.
  6. Anhängen </p>

Ein anderer Ansatz: Reguläre Ausdrücke verwenden

%Vor%

Entspricht 2 oder mehr <br> . (Siehe php.net auf preg_split , um dies zu tun.)

Nun, die gleiche Vorgehensweise in Schritt 2 und 3: Schleife das Array zweimal, einmal von Anfang an (0..Länge) und einmal vom Ende nach unten (Länge 1..0). Wenn der Eintrag leer ist, entfernen Sie ihn aus dem Array. Wenn der Eintrag nicht leer ist, beenden Sie die Schleife.

Um dies zu tun:

%Vor%     
Pindatjuh 02.06.2010 16:50
quelle
0

Ich denke, das sollte für Schritt 2 funktionieren, es sei denn, ich verstehe Ihr Szenario nicht vollständig:

%Vor%     
OneNerd 02.06.2010 17:08
quelle

Tags und Links