Autor Beitrag
DaKirsche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: 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:
ausblenden 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
ausblenden 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:
ausblenden Quelltext
1:
Gütesiegel&<>ß					


Wieso werden die Umlaute und das ß nicht ersetzt?

MfG
DaKirsche

_________________
Die simpelsten Fehler sind meist die Schwersten...
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Di 13.01.09 17:28 
Danke für die Antwort...

da bekomme ich ja noch m ehr Kauderwelsch raus ;)
ausblenden Quelltext
1:
2:
3:
function prepareText4Query($text){
return htmlentities($text);
}


ergibt bei obiger Übergabe:
ausblenden Quelltext
1:
Gütesiegel&<>�					

:(

_________________
Die simpelsten Fehler sind meist die Schwersten...
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 13.01.09 17:42 
Darf ich fragen, wozu du das brauchst? Ich würde ja auch auf den Zeichensatz tippen.
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: Di 13.01.09 17:55 
Bei mir:

Ausgabe: Gütesiegel&<>ß
Im Quelltext: G&uuml;tesiegel&amp;&lt;&gt;&szlig;

Würde mal sagen, der Browser interpretiert das wieder zurück.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: Di 13.01.09 18:26 
user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
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 &szlig; wieder ein ß macht, was ja auch seine Aufgabe ist :-) Zumindest bei der Ausgabe. Im Quelltext steht ja das gewünschte Ergebniss.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Di 13.01.09 20:49 
Es kommt darauf an, welches charset deine Seite, bzw. dein Formular benutzen. Versuch doch mal

ausblenden Quelltext
1:
htmlentities ($text, ENT_NOQUOTES, 'UTF-8');					


Das mit den Quotes hängt dann davon ab...
DaKirsche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Mi 14.01.09 11:14 
hmmmm....
also trotz Zeichensatz ISO-8859-1 bzw UTF-8 funktionieren htmlentites, bzw htmlspecialchars nicht.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 17.01.09 23:19 
user profile iconDaKirsche hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: 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.