Zeilenumbrüche entfernen \r\n, \r, \n etc. funktioniert nicht

DrEvil

Erfahrenes Mitglied
Hallo Leute,
ich habe einen String und möchte die Zeilenumbrüche entfernen:
PHP:
$string = 'Dies ist ein Beispieltext.
Er hat Zeilenumbrüche und Punkte und auch "-Anführungszeichen.
Kann das Script ihn korrekt verarbeiten?';

function analyzer ($txt) {
	//Roh-Text bearbeiten
	$txt = str_replace(array('\r\n','\n\r', '\n', '\r'), ' ', $txt); //Formt Zeilenumbrüche in Leerzeichen um
	
	return explode(' ', $txt);
}

Als Ergebnis wird mir folgendes ausgegeben:
Code:
Array (
[0] => Dies
[1] => ist
[2] => ein
[3] => Beispieltext. Er
[4] => hat
[5] => Zeilenumbrüche
[6] => und
[7] => Punkte
[8] => und
[9] => auch
[10] => "-Anführungszeichen. Kann
[11] => das
[12] => Script
[13] => ihn
[14] => korrekt
[15] => verarbeiten?
)

Die Verarbeitung der Umbrüche in array[3] und array[10] kann ja nicht korrekt funktioniert haben, sonst hätte die explode-Funktion doch da ebenfalls den string getrennt, oder?

Dabei habe ich alle möglichen Codes für Zeilenumbrüche, die ich so bei der Lösungssuche gefunden habe, in meinem str_replace genutzt...


Kann jemand helfen? Danke.
 
Versuch es mal so:

PHP:
<?php
$string = 'Dies ist ein Beispieltext.
Er hat Zeilenumbrüche und Punkte und auch "-Anführungszeichen.
Kann das Script ihn korrekt verarbeiten?';

function analyzer ($txt) {
	//Roh-Text bearbeiten
	$txt = str_replace(array("\r\n","\n\r", "\n", "\r"), ' ', $txt); //Formt Zeilenumbrüche in Leerzeichen um

	return explode(' ', $txt);
}

var_dump( analyzer($string) );

Der Grund: Zeilen-Enden in Single-Quotes zu setzen kommt dem maskieren des \ gleich.

PHP:
// Folgende zwei zeilen sind äquivalent:

$str = '\r\n';
$str = "\\r\\n";

Das Single-Quote bei diesen Speziel-Charakteren sorgt dafür, das die Zeichen nicht gefunden werden.

EDIT: Im Übrigen kannst du das \r\n und das \n\r sparen, wenn du ohnehin schon die Einzelzeichen ersetzt.
 
Zuletzt bearbeitet:
Zurück