wake-up-neo.com

Mehrere Zeilenumbrüche, Tabulatoren, Leerzeichen ersetzen

Ich möchte mehrere Newline-Zeichen durch ein Newline-Zeichen ersetzen, mehrere Leerzeichen mit einem einzigen Leerzeichen.
Ich habe preg_replace("/\n\n+/", "\n", $text); ausprobiert und bin fehlgeschlagen!

Diesen Job erledige ich auch für den $ text zum Formatieren.

$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);

$ text ist ein großer Text, der vom Benutzer für BLOG genommen wurde. Zur besseren Formatierung verwende ich Wordwrap.

25
Sourav

Theoretisch funktionieren reguläre Ausdrücke, aber das Problem ist, dass nicht alle Betriebssysteme und Browser\n nur am Ende der Zeichenfolge senden. Viele senden auch ein\r.

Versuchen:

Edit: Ich habe das hier vereinfacht:

preg_replace("/(\r?\n){2,}/", "\n\n", $text);

Edit: Und um das Problem einiger Sendungen zu beheben, nur:

preg_replace("/[\r\n]{2,}/", "\n\n", $text);

Update 1: Basierend auf Ihrem Update:

// Replace multiple (one ore more) line breaks with a single one.
$text = preg_replace("/[\r\n]+/", "\n", $text);

$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);
48

verwenden Sie\R (was eine Zeilenende-Sequenz darstellt):

$str = preg_replace('#\R+#', '</p><p>', $str);

hier gefunden: http://forums.phpfreaks.com/topic/169162-solved-replacing-two-new-lines-with-paragraph-tags/

PHP-Dokumentation zu Escape-Sequenzen :

\ R (Zeilenumbruch: stimmt mit\n,\r und\r\n überein)

31
Armel Larcier

Dies ist die Antwort, wenn ich die Frage verstehe:

// normalize newlines
preg_replace('/(\r\n|\r|\n)+/', "\n", $text);
// replace whitespace characters with a single space
preg_replace('/\s+/', ' ', $text);

Bearbeiten

Dies ist die eigentliche Funktion, mit der ich neue Zeilen in HTML-Zeilenumbrüche und Absatzelemente konvertieren kann:

/**
 *
 * @param string $string
 * @return string
 */
function nl2html($text)
{
    return '<p>' . preg_replace(array('/(\r\n\r\n|\r\r|\n\n)(\s+)?/', '/\r\n|\r|\n/'),
            array('</p><p>', '<br/>'), $text) . '</p>';
}
8
Sonny

Sie benötigen den mehrzeiligen Modifikator, um mehrere Zeilen abzugleichen:

preg_replace("/PATTERN/m", "REPLACE", $text);

Auch in Ihrem Beispiel scheinen Sie 2+ Zeilenumbrüche durch genau 2 zu ersetzen.

2
Chris Eberle

Ich habe alles oben ausprobiert, aber es funktionierte nicht für mich. Dann habe ich einen langen Weg geschaffen, um dieses Problem zu lösen ...

Vor : 

echo nl2br($text);

Nach dem :

$tempData = nl2br($text);
$tempData = explode("<br />",$tempData);

foreach ($tempData as $val) {
   if(trim($val) != '')
   {
      echo $val."<br />";
   }
}

Und es hat für mich gearbeitet .. Ich habe hier geschrieben, weil jemand hierher gekommen ist, um eine Antwort wie ich zu finden.

1
Shaunak Shukla

Wenn Sie nur mehrere Registerkarten durch eine einzige Registerkarte ersetzen möchten, verwenden Sie den folgenden Code.

preg_replace("/\s{2,}/", "\t", $string);
1
Heman G

Ich würde so etwas vorschlagen:

preg_replace("/(\R){2,}/", "$1", $str);

Dadurch werden alle Unicode-Zeilenumbrüche berücksichtigt.

1
anubhava

ich habe mich mit der Funktion strip_tags in php befasst, hatte einige Probleme wie: nach einem Zeilenumbruch erscheinen dann eine neue Zeile mit einigen Leerzeichen und dann erscheint ein neuer Zeilenumbruch fortlaufend ... usw. ohne Regel :(.

das ist meine Lösung für den Umgang mit strip_tags

Mehrere Leerzeichen in einen, mehrere Zeilenumbrüche in einen Zeilenumbruch ersetzen

ich hoffe das hilft

 function cleanHtml($html)
 {
        // clean code into script tags
        $html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

        // clean code into style tags
        $html = preg_replace('/<\s*style.+?<\s*\/\s*style.*?>/si', '', $html );

        // strip html
        $string = trim(strip_tags($html));

        // replace multiple spaces on each line (keep linebreaks) with single space 
        $string = preg_replace("/[[:blank:]]+/", " ", $string); // (*)

        // replace multiple spaces of all positions (deal with linebreaks) with single linebreak
        $string = preg_replace('/\s{2,}/', "\n", $string); // (**)
        return $string;
 }

schlüsselwörter sind (*) und (**)

0
Hai Nguyen

Ersetzen Sie den Kopf und das Ende der Zeichenfolge oder des Dokuments!

preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);
0
user3129040

Versuche dies:

preg_replace("/[\r\n]*/", "\r\n", $text); 
0
The Mask