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.
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);
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)
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>';
}
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.
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.
Wenn Sie nur mehrere Registerkarten durch eine einzige Registerkarte ersetzen möchten, verwenden Sie den folgenden Code.
preg_replace("/\s{2,}/", "\t", $string);
Ich würde so etwas vorschlagen:
preg_replace("/(\R){2,}/", "$1", $str);
Dadurch werden alle Unicode-Zeilenumbrüche berücksichtigt.
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 (**)
Ersetzen Sie den Kopf und das Ende der Zeichenfolge oder des Dokuments!
preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);
Versuche dies:
preg_replace("/[\r\n]*/", "\r\n", $text);