Entwickler-Ecke
Programmiersprachen (Server) - Problem bei PHP-Funktion mit str_replace($from, $to, $src);
DaKirsche - Di 13.01.09 16:20
Titel: Problem bei PHP-Funktion mit str_replace($from, $to, $src);
Hallo Community....
ich habe eine PHP-Funktion zum ersetzen bestimmter Zeichen....jedoch funktioniert diese nicht so, wie ich es will.
Eigentlich ist es nix großen, aber ich finde einfach nicht den Fehler....:
Hier mal der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| class PageView{ [...] function prepareText4Query($text="Kein Text vorhanden"){ $Changes = array(0); //Definieren, welche Zeichen wodurch ersetzt werden müssen $Changes[sizeof($Changes)] = array('&','&'); $Changes[sizeof($Changes)] = array('ä','ä'); $Changes[sizeof($Changes)] = array('Ä','Ä'); $Changes[sizeof($Changes)] = array('ü','ü'); $Changes[sizeof($Changes)] = array('Ü','Ü'); $Changes[sizeof($Changes)] = array('ö','ö'); $Changes[sizeof($Changes)] = array('Ö','Ö'); $Changes[sizeof($Changes)] = array('ß','ß'); $Changes[sizeof($Changes)] = array('"','"'); $Changes[sizeof($Changes)] = array('€','€'); $Changes[sizeof($Changes)] = array('<','<'); $Changes[sizeof($Changes)] = array('>','>'); $Changes[sizeof($Changes)] = array('»','»');
for ($t=0;$t<sizeof($Changes);$t++){ $text = str_replace($Changes[$t][0],$Changes[$t][1],$text); } return $text; } [...] } |
Dann mein Aufruf
Quelltext
1: 2: 3: 4: 5:
| $view = new PageView(); $query = $_POST[searchstring]; // Hier wird die Eingabe als Beispiel "Gütesiegel&<>ß" eingelesen $query = $view -> prepareText4Query($query);
echo $query; |
Das ergibt im Quelltext der Seite dann:
Wieso werden die Umlaute und das ß nicht ersetzt?
MfG
DaKirsche
iKilledKenny - Di 13.01.09 16:54
Kann das evtl. am CharSet liegen (ISO-8859-1, utf-8 )?
Ansonsten benutze ich für sowas htmlentities...
DaKirsche - Di 13.01.09 17:28
Danke für die Antwort...
da bekomme ich ja noch m ehr Kauderwelsch raus ;)
Quelltext
1: 2: 3:
| function prepareText4Query($text){ return htmlentities($text); } |
ergibt bei obiger Übergabe:
:(
Jakob_Ullmann - Di 13.01.09 17:42
Darf ich fragen, wozu du das brauchst? Ich würde ja auch auf den Zeichensatz tippen.
wunsiedler - Di 13.01.09 17:55
Bei mir:
Ausgabe: Gütesiegel&<>ß
Im Quelltext: Gütesiegel&<>ß
Würde mal sagen, der Browser interpretiert das wieder zurück.
Jakob_Ullmann - Di 13.01.09 18:24
Zitat: |
Würde mal sagen, der Browser interpretiert das wieder zurück. |
Was meinst du damit??
edit: Man könnte auch einfach
htmlspecialchars() benutzen...
wunsiedler - Di 13.01.09 18:26
Jakob_Ullmann hat folgendes geschrieben : |
Zitat: | Würde mal sagen, der Browser interpretiert das wieder zurück. |
Was meinst du damit??
edit: Man könnte auch einfach htmlspecialchars() benutzen... |
...das der Browser aus ß wieder ein ß macht, was ja auch seine Aufgabe ist :-) Zumindest bei der Ausgabe. Im Quelltext steht ja das gewünschte Ergebniss.
Jakob_Ullmann - Di 13.01.09 19:30
Ach das meinst du. Ja, nur halt gilt die direkte Eingabe von "ß" und so weiter als unsauber, und kann auch zu Problemen führen.
@DaKirsche: Ich würde sagen, wenn htmlentities() Cowderwelsh liefert, ist das ein eindeutiges Zeichen für den falschen Zeichensatz.
iKilledKenny - Di 13.01.09 20:49
Es kommt darauf an, welches charset deine Seite, bzw. dein Formular benutzen. Versuch doch mal
Quelltext
1:
| htmlentities ($text, ENT_NOQUOTES, 'UTF-8'); |
Das mit den Quotes hängt dann davon ab...
DaKirsche - Mi 14.01.09 11:14
hmmmm....
also trotz Zeichensatz ISO-8859-1 bzw UTF-8 funktionieren htmlentites, bzw htmlspecialchars nicht.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| [..] <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> [...] function prepareText4Query($text){ return htmlentities($text,ENT_QUOTES,'ISO-8859-1'); }
function prepareText4QueryII($text){ return htmlspecialchars($text,ENT_QUOTES,'ISO-8859-1'); } [...] $query = prepareText4Query($_POST[searchString]); $queryII = prepareText4QueryII($_POST[searchString]); [...] |
@Jakob_Ullmann
Ich will die Daten meines Forumlars umwandeln, um via SQL die Datenbank zu durchsuchen...
Da der Inhalt der Datenbank durch den genutzten Editor (FCK) bereits entsprechend formattiert ist benötige ich diese Umformung.
BenBE - Mi 14.01.09 11:23
Ansonsten: für MySQL: Setz den Charset der Connection auf den richtigen Wert, lass mit iconv oder mbstring den Charset zu diesem Charset konvertieren und rufe dann einmal mysql_real_escape_string auf deine Benutzer-Teile des String auf.
Für Postgres geht das analog: Verbindungscharset setzen, Prepared Query initialisieren und die Parameter mit Daten im richtigen Charset initialisieren.
Versuche keine Krücken zum Escapen selber zu schreiben; das kann nur schiefgehen!
Heiko - Sa 17.01.09 23:19
DaKirsche hat folgendes geschrieben : |
hmmmm....
also trotz Zeichensatz ISO-8859-1 bzw UTF-8 funktionieren htmlentites, bzw htmlspecialchars nicht.
|
Mal eine dumme Frage: womit überprüfst du es? Wenn du dir mit dem FireFox-Quelltext-Editor das anschaust, kannste stundenlang suchen. Firefox interpretiert den Quelltext bereits teilweise (das meinte wunsiedler). Also schau dir mal den Quelltext mit dem Notepad/IE/Opera an...
wunsiedler - So 18.01.09 14:08
Zitat: |
Mal eine dumme Frage: womit überprüfst du es? Wenn du dir mit dem FireFox-Quelltext-Editor das anschaust, kannste stundenlang suchen. Firefox interpretiert den Quelltext bereits teilweise (das meinte wunsiedler). Also schau dir mal den Quelltext mit dem Notepad/IE/Opera an... |
Sag ich doch die ganze Zeit! :-) Deine Funktion funktioniert :shock: nur an der Ausgabe per Browser hängt's.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!