Autor |
Beitrag |
DaKirsche
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Di 13.01.09 16:20
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:
Quelltext
Wieso werden die Umlaute und das ß nicht ersetzt?
MfG
DaKirsche
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
iKilledKenny
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Di 13.01.09 17:28
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
Jakob_Ullmann
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Di 13.01.09 17:42
Darf ich fragen, wozu du das brauchst? Ich würde ja auch auf den Zeichensatz tippen.
|
|
wunsiedler
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: 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.
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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!
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Heiko
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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 nur an der Ausgabe per Browser hängt's.
|
|
|