Problem mit str_replace

P

Plinzen

Foren As
Servus Zusammen,

ich habe ein Problem mit der Funktion str_replace unter PHP Version 5.2.0 zusammen in der Verwendung in einer Klasse. (Wenn ich es ohne Klasse versuche, dann klappts anscheinend).
Die beschriebene Methode convertTextToXML soll u.a. die Umlaute durch z.B. ä usw ersetzen.

Hier der Code der Klasse
PHP:
/*
	Diese Klasse enthält allgemeine Tools- Methoden
*/

class DtoTools{
	
	/**
		Diese Funktion konvertiert einen normalen Text in XML für HTML-Ausgabe. 
		Aus "ä" wird z.B. "ä" usw.
	**/
	function convertTextToXML($text){
		echo($text);
		// Reihenfolge unbedingt einbehalten.
		$search = array('ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß');
		$replace = array('ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü', 'ß');
		$text1 = str_replace($search, $replace, $text);
		
		echo("<br>".$text1);
		return $text1;
	}

Aufgerufen wird das Ganze von einer PHP-Datei, die Formulardaten ausliest:

PHP:
	/* Ende Plausis, jetzt den Datensatz ins XML einfügen */
	if ($ok == true){
		$n = new DtoNews();
		$n->setCreator($txtCreator);
		$n->setTitle($txtTitle);
		$n->setDate(DtoTools::makeDate($txtDate));
		$n->setContent(DtoTools::convertTextToXML($txtContent));
		$n->setId(0);
		if ($n->save()==true){
			echo("<h3>Eintrag erfolgreich hinzugef&uuml;gt</h3>");
		}
	}
	
	echo("<p><a href='javascript:history.back()'>zur&uuml;ck</a></p>");
	echo("<p><a href='../index.php'>zur Homepage</a></p>");

Die Variable $txtContent wird aus einem Formular ausgelesen:
PHP:
$txtContent = $_POST['txtContent'];

Das Ergebnis ist jedoch, dass die str_replace-Funktion nicht durchgeführt wurde. In den Variablen $text und $text1 steht der gleiche Wert!

Kann mir hier jemand weiterhelfen? Gibt es irgendwelche Probleme beim Verwenden von str_replace in einer Klasse??? Bin leider nicht der wahre PHP-Crack...

cu Plinzen
 
Zuletzt bearbeitet:
weiß ned direkt auf Anhieb obs stimmt, aber $search und $replace sind bei dir Arrays. Also musst du das ding wohl in ne for-Schleife packen und durchlaufen lassen, ungefähr so:

Code:
for($i = 0;$i < count($search); $i++)
{
$text = str_replace($search[$i], $replace[$i], $text);
}

echo $text;


Muss aber nochmal nachgucken

EDIT:

hier benutzen se auch ne Schleife: http://selfphp.de/funktionsreferenz/string_funktionen/str_replace.php
 
Zuletzt bearbeitet:
Hi,

laut http://php.net/str_replace kann man das Array direkt als Parameter benutzen.

Ich verstehe nicht ganz wieso du die Klasse "DtoNews" instanzierst. Die Klasse heißt doch "DtoTools". - Vielleicht war das schon der Fehler? - Ich kann soweit sonst nichts erkennen.

Gruß
Dizzy
 
Ne, das passt eigentlich schon. Die Klasse DtoNews stellt eine neue Nachricht dar. Das Ganze soll halt einfach ne Verwaltung von Nachrichten werden. Und über die Klasse DtoNews wird die Nachricht in ein XML gespeichert.
Die Klasse DtoTools wird nicht instanziert. Sie hat eben (im Moment) nur diese eine statische Methode convertTextToXml.

Nichts desto trotz ich habe heute Nacht mal drüber geschlafen und jetzt glaub ich, ich weiß warum es nicht geht: Am Server kommen einfach nicht die Umlaute 'ä', 'ö', 'ü', usw. an, sondern bereits so komische Zeichen 'Á²', usw. Also praktisch kommen die Umlaute, die ich in der HTML-Textarea eingegeben habe, nicht richtig im PHP-Skript an.

Woran kann das liegen? Irgendein Zeichensatzproblem? ?(
Wie krieg ich das hin, dass ich die Umlaute richtig an meinen Server übergeben werden. Das Formular wird mit POST abgesendet.

Danke, schonmal für die bisherigen antworten!
 
Das ist mit Sicherheit ein Zeichensatz-Problem, ich nutze nur noch UTF-8. Hat deine html-Ausgabe auch den richtigen Zeichensatz? Ansonsten kann man, wenn ich mich nicht irre auch beim <form>-Tag den Zeichensatz angeben.
Zudem gibt es in PHP doch für alles schon eine Funktion → htmlentities
 
Hmm, ja ich denke damit könntest du Recht haben. Die HTML-Seite ist mit ISO-8859-1 codiert. Genauer gesagt hab ich das mit diesem HTML-Tag gemacht:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

Zuerst wollte ich auch UTF-8 einsetzen, aber leider hat er mir dann die Umlaute auf der HTML-Seite nicht korrekt umgesetzt. Muss ich im PHP-Code dann die HTML-Ausgabe vorher durch irgendeine UTF8-encode-Funktion jagen, bevor ich ihn ausgebe???
 
Du musst die Daten die du ausgibst dann auch als UTF-8 augeben. Klar. Wenn du UTF-8 nutzen solltest, dann speicher die Datei auch als UTF-8 bzw. die Daten aus einer Datenbank auch in UTF-8 speichern. Sonst kann er die ja nicht richtig darstellen. Die Kodierung einer Datei kannst du z.B. mit
Code:
file <dateiname>
sehen. Ob der Browser die richtige Kodierung nutzt, kannst du bei Firefox ganz einfach auf den Seiteninformationen sehen.
 

Ähnliche Themen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

dovecot und postfix Konfiguration Problem

NagiosGrapher 1.7.1 funktioniert nicht

MySQL-Variable in php-Funktion

Problem mit Apache2 + MySQL Server

Zurück
Oben