PHP Woher kommen die Leerzeichen in der Variabel?

Atreju93

Lieutenant
Registriert
Nov. 2010
Beiträge
596
Hallo zusammen

Ich habe ein etwas ulkiges Problem...

Ich muss aus einer .txt Datei daten einlesen.. besser gesagt Kategorien.

Die Textdatei sieht so aus(kategorie.txt):

Code:
Arbeit
Beziehung
Gesundheit
Politik
Sport
Unterhaltung
wohnen

in PHP habe ich folgenden Code:

Code:
$kategoriedatei = fopen ("fragen/daten/kategorie.txt","r");
$kategoriestring = "";
$kategorien = array();
$ie = 0;
	while (!feof($kategoriedatei)) {
		$kategorie = fgets($kategoriedatei,500);
		array_push ($kategorien,$kategorie);
		$frage[$ie] = "";
				$kategoriestring .= "<tr>
								<td> <?php
									ECHO \"$kategorie\";?><br>
									@echo \"$frage[$ie]\";?><br>
								</td>
							</tr>";
		$ie++;
		str_replace(' ','',$kategorie);
		echo "inhalt von kategorie: $kategorie -<br>";
		}

Das Echo gibt mir jedoch immer folgendes aus:

Code:
inhalt von kategorie: Arbeit -
inhalt von kategorie: Beziehung -
inhalt von kategorie: Gesundheit -
inhalt von kategorie: Politik -
inhalt von kategorie: Sport -
inhalt von kategorie: Unterhaltung -
inhalt von kategorie: wohnen -

Wie ihr unschwer erkennen könnt, ist nach den Kategorien bzw. werten immer ein Leerzeichen.. Mein Problem ist, dass ich diese Werde dann weiterverwende, um auf Dateien zu verweisen. Ich versuche danach eine arbeit.php zu öffenen, aber da hier ein Leerzeichen darin ist, versucht er immer Arbeit .txt zu öffnen, was natürlich nicht existent ist..

Code:
Warning: fopen(fragen/daten/Arbeit .txt): failed to open stream: Invalid argument in C:\xampp\htdocs\Umfrage\umfrage.php on line 59

An was könnte das liegen.. ich habe schon (wie ihr im Code erkennen könnt) versucht ein mögliches Leerzeichen herauszufiltern - leider ohne ergebnis
 
Das kommt daher, dass \r bzw. \n mit eingelesen werden und bestehen bleiben - trim() hilft.
 
PHP:
str_replace('\n','',$kategorie);
Könnte vielleicht funktionieren.

Oder die Begriffe in der Textdatei so abspeichern und dann halt anders auslesen:

Code:
Arbeit:Beziehung;Gesundheit;Politik;Sport;Unterhaltung;wohnen
 
leider hat trim() keine wirkung.. also wenn ich jetzt folgenden Code habe:

Code:
$kategoriedatei = fopen ("fragen/daten/kategorie.txt","r");
$kategoriestring = "";
$kategorien = array();
$ie = 0;
	while (!feof($kategoriedatei)) {
		$kategorie = fgets($kategoriedatei,500);
		array_push ($kategorien,$kategorie);
		$frage[$ie] = "";
				$kategoriestring .= "<tr>
								<td> <?php
									ECHO \"$kategorie\";?><br>
									@echo \"$frage[$ie]\";?><br>
								</td>
							</tr>";
		$ie++;
		str_replace('\r\n','',$kategorie);
		trim($kategorie);
		echo "inhalt von kategorie: $kategorie-<br>";
		}
		//? > muss am Anfang des Strings stehen, damit eval ausgeführt werden kann (da code mit html beginnt). 
		//Dies wird ausserhalb der Schleife definiert, da sonst x-mal ? > darin steht. 
		$kategoriestring = "?>".$kategoriestring;

passiert mit dem Resultat genau nichts.. das Ergebnis lautet immer noch:

Code:
inhalt von kategorie: Arbeit -
inhalt von kategorie: Beziehung -
inhalt von kategorie: Gesundheit -
inhalt von kategorie: Politik -
inhalt von kategorie: Sport -
inhalt von kategorie: Unterhaltung -
inhalt von kategorie: wohnen-
 
Ich schätze mal, Strings sind in PHP immutable*. Du musst den Rückgabewert deines trims schon einer Variablen zuweisen :)

edit: *zumindest vom Verhalten her.
 
Zurück
Oben