Funktion wird beim ersten mal benutzen nicht aufgerufen

Orbit

Erfahrenes Mitglied
Hallo,
Ich habe eine Funktion, die meine Formulardateien auf Sonderzeichen durchsucht und diese durch HTML ersetzt.
Die sieht so aus:
PHP:
function sonder($text){
         	$text=str_replace("Ä","Ä",$text);
                 $text=str_replace("Ö","Ö",$text);
                 $text=str_replace("Ü","Ü",$text);
                 $text=str_replace("ä","ä",$text);
                 $text=str_replace("ö","ö",$text);
                 $text=str_replace("ü","ü",$text);
                 $text=str_replace("ß","ß",$text);
                 return $text;
         }
Dies dürfte doch eigentlich kein Problemfall sein, oder?

aufgreufen wird die Datei so:
PHP:
         	$text=sonder($text);

Problem:
Immer, wenn der Browser gerade erst geöffnet wurde, scheint diese Funktion nicht zu laufen.
(Die Zeichen werden nicht ersetzt, in der HTML - Datei sieht das Ganze dann naürlich aus wie Hulle).

Sobald man die Funktion einmal durchlaufen hat (so dass sie falsch war), geht alles ohne Probleme.. schon seltsam oder?

Ich hoffe Ihr könnt mir helfen,
mfg Orbit
 
Soweit nichts spektakuläres zu entdecken. In welchem Kontext wird die Funktion denn aufgerufen? Also interessant wäre der Teil, in dem die Funktion zum ersten mal aufgerufen wird.
 
Also das ganze ist ein Gästebuch, der Eintrag wird per Formular erstellt und an die Datei writer.php geschickt, die diese Daten dann umsetzt und einträgt.
In der Datei werden dann zum Beispiel Smilies etc eingetragen (sprich der text wird untersucht und in html umgewandelt, also wenn der user text eingibt, wird daraus in der Datei halt <b>text</b>);

Da gibts dann eben auch einen Zwischenschritt in dem diese Funktion aufgerufen wird.
Dass der Fehler nur beim ersten mal auftritt, wenn geschrieben wird kann doch eigentlich gar keinen richtigen Grund haben oder?
Die Datei wird immer per $_POST bearbeitet, immer auf demselben Weg.
Aber es ist wirklich so...

Immer wenn ich dann die einträge ansehen wollte, war der erste Eintrag von dieser Browsersitzung komplett kaputt... (also nur die Sonderzeichen, alle anderen Ersetzungsmethoden sind komplett OK).
 
Zuletzt bearbeitet:
Stark verkürtzt die Wege der $text:
PHP:
<?php
        $text=$_POST[text];
	$text=nl2br($text);
         	//Rot
                 $text=str_replace("[red]","<font color='red'>",$text);
                 $text=str_replace("[/red]","</font>",$text);
                 //Blau
                 $text=str_replace("[blue]","<font color='blue'>",$text);
                 $text=str_replace("[/blue]","</font>",$text);
                 //Green
                 ........
                 //sad
                 $text=str_replace("[:sad:]","&nbsp;<img  src='bilder/smilies/sad.gif'>&nbsp;",$text);
                 //baeh
                 $text=str_replace("[:baeh:]","&nbsp;<img src='bilder/smilies/baeh.gif'>&nbsp;",$text);
                $text=sonder($text); 

         function sonder($text){
         	$text=str_replace("Ä","&Auml;",$text);
                 $text=str_replace("Ö","&Ouml;",$text);
                 $text=str_replace("Ü","&Uuml;",$text);
                 $text=str_replace("ä","&auml;",$text);
                 $text=str_replace("ö","&ouml;",$text);
                 $text=str_replace("ü","&uuml;",$text);
                 $text=str_replace("ß","&szlig;",$text);
                 return $text;
}
Wie gesagt, ist stark verkürzt aber alles was da kommt sind weiterer Ersetzungsmethoden.
Am Ende wird $text eben in eine Datei geschrieben.....
mfg
 
Ok, wie sieht die Ausgabe beim ersten mal aus? Ich vermute, kryptische Zeichen. Kannst du mal eines hier rein schreiben? Ich hab die Vermutung, das dein Webserver beim ersten mal ein Encoding sendet, was dein Browser nicht versteht, und daher auf ISO-8859-1(5) zurück schaltet, die Zeichen aber UTF-8 ausgeliefert werden. Weißt du, was Zeichensätze sind, und wie sie geändert werden? Besorg dir mal Live HTTP Headers für Firefox als Extension und spiel damit rum.

Zeig aber auf jeden Fall noch eine Ausgabe, so kann man gewisser sagen, ob es das ist, was ich vermute.
 
Also so in etwa sieht dann eben der komplette Text aus:

Gästebuch
natürlich

mfg Orbit


EDIT:
Du meinst also, dass die Datei während dem $_POST so verunstaltet wird?
Dann könnte ich die Funktion ja auch erstmal in JavaScript in der ersten datei machen...
 
Zuletzt bearbeitet:
Die Ausgabe lässt darauf schließen, dass die Zeichenketten UTF-8-kodiert sind, sie jedoch vermutlich als ISO 8859-1 interpretiert werden.
Du solltest dich also erst einmal für eine Kodierung entscheiden und diese dann exlpizit im HTTP-Header angeben.


In beiden Zeichensätzen (Unicode beziehungsweise ISO 8859-1) sind die Umlautzeichen übrigens enthalten, was die Darstellung durch Zeichenreferenzen unnötig macht.
 
Zurück