PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit htmlentities()


N'Koto Zinde
28.08.2007, 17:36:59
Hallo,

ich hätte da ein Problem:

Bevor meine Daten aus einem Formular in die Datenbank geschrieben werden, lasse ich mit htmlentities() die Sonderzeichen in HTML-Code umwandeln.

und zwar so:
$_REQUEST[Name] = htmlentities($_REQUEST[Name], ENT_QUOTES);

Klappt auch, bis auf die Umlaute:
Aus einem ä sollte ja theoretisch ein ä werden. Tatsächlich wird daraus aber ein: ä

Benutze ich htmlentities nicht, werden Umlaute einfach so übergeben aber ich zerschieße mir mit eventuellen Hochkommata oder Anfrühungszeichen meine Abfragen.

Der Zeichensatz der in meinem Dokument verwendet wird ist ISO-8859-1 (wie es eigentlich ja auch sein sollte).

Ich habe dieses Problem schon länger, und bisher konnte mir noch keiner helfen. Villeicht jetzt?

Raketenmann
28.08.2007, 19:10:19
Dann verwende doch addslashes() statt htmlentities() ...

z0iD
28.08.2007, 19:20:12
Na das ist doch ein bisschen "davongelaufen". Das wird definitiv an Zeichensatz liegen.
Jeder hat das doch schon mal gesehen, wenn sich ein "ä" in zwei andere seltsam anmutende Zeichen verwandelt. Wenn htmlentities() jene zwischen die Finger bekommt ist klar dass da so ein Bockmist rauskommt.
Leider fällt mir da auch jetzt keine Lösung ein. Aber ich bin mir recht sicher, dass es am Zeichensatz liegt.

z0iD
28.08.2007, 19:22:51
Nachtrag:
Hast Du mal versucht das "ä" in ein int umzuwandeln und dann mal auszugeben? Diese Zahl solltest Du dann mal mit dem Index vergleichen, den das "ä" in dem von Dir gewählten Zeichensatz haben sollte.

Raketenmann
28.08.2007, 19:27:51
Na das ist doch ein bisschen "davongelaufen".


Stimmt schon...


Leider fällt mir da auch jetzt keine Lösung ein.

Wenn er es eilig hat, wäre es zumindest eine Lösung ;-)

feuervogel
28.08.2007, 22:23:46
ohne weitere informationen lässt sich da aber nicht viel sagen außer "bei mir klappts"

bUTschy
28.08.2007, 23:43:08
nabend ;)

Arbeite mit $_POST und verzichte auf $_REQUEST ;-)
Fürs speichern in die Datenbank, guck dir mal die PHP Funktion mysql_real_escape_string() (http://de.php.net/mysql_real_escape_string) an.
$_POST['Name'] = mysql_real_escape_string($_POST['Name']);

N'Koto Zinde
30.08.2007, 00:34:18
so danke schon mal für die vielen antworten.

das es am zeichensatz liegt, dacht ich mir bereits, aber wie kann ich denn den zeichensatz anders festlegen außer so:

<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />

in anderen dokumenten von mir funktioniert das auch. nur in diesem einen eben nicht. kann es vielleicht daran liegen, dass ich die ganzen kram mit htmlentities() und Zeichensatz erst später in das Dokument hinzugefügt habe? Allerdings finde ich auch keine Unterschiede zwischen den Dokumenten in denen es funktioniert und in denen in dens nicht funktioniert. (Oder ich weiß nicht nach was ich suchen soll...)

vielleicht noch jemand ne Idee??

PS: Es geht ja mir nicht nur darum die Daten schön in der Datenbank zu speichern, sondern auch wieder abzufragen und schön ausgeben zulassen. (und bei xhtml transitional sind umlaute in quelltext verboten )

z0iD
30.08.2007, 01:11:14
Ähm
Nachtrag:
Hast Du mal versucht das "ä" in ein int umzuwandeln und dann mal auszugeben? Diese Zahl solltest Du dann mal mit dem Index vergleichen, den das "ä" in dem von Dir gewählten Zeichensatz haben sollte.

N'Koto Zinde
30.08.2007, 11:53:06
$var = "ä";

settype ( $var, 'integer' );

echo $var;

heraus kommt '0'
und jetzt?

z0iD
30.08.2007, 12:01:22
Der Typ heißt in PHP ja auch int.

Ich persönlich wandle immer mit vorangestellten Typklammern um, also:$intvar = (int)$strvar;
Das settype() kannte ich noch gar nicht.

N'Koto Zinde
30.08.2007, 13:18:31
kommt immer noch '0' bei raus :-(

N'Koto Zinde
30.08.2007, 13:30:04
ich hab das problem soeben etwas mehr eingrenzen können:

Es liegt nicht an htmlentities() sondern die Daten werden schon falsch vom Forumlar übergeben. Das heißt nach dem Absenden kommt nicht mehr 'ä' an sondern 'ä' das wiederum durch htmlentities zu '&Atilde;&curren;' wird.

Jemand ne Ahnung warum das so ist?

achja, mein Formular sieht in etwa so aus:

<form method='post' action='index.php'>
<table>
<tr><td><br/>Name:</td><td><br/><input name='name' /></td><td><br/>Text:</td>
<td rowspan='4'><table><tr><td align='right'>";
</td></tr><tr><td>
<textarea name='text' rows='' cols=''></textarea>
</td></tr></table>
</td></tr>
<tr><td>EMail-Adresse:</td><td><input name='email' /></td></tr>
<tr><td>Homepage:</td><td><input name='homepage' value='http://' /></td></tr>
<tr><td></td><td><input type='submit' class='button' value='Eintragen' /></td></tr>
</table>
<input type='hidden' value='$seite[sid]' name='sid' />
</form>

z0iD
30.08.2007, 13:30:22
Hm ... wie kann man bei PHP denn den Zeichencode herausfinden? Ich dachte dass es das tun müsste ... aber vielleicht hilft einem das sowieso nicht weiter.

meikel (†)
30.08.2007, 13:48:29
Jemand ne Ahnung warum das so ist?
Wenn Du Dir den HEAD Bereich Deines Formulardokuments genauer anguckst, findest Du die Lösung.

N'Koto Zinde
30.08.2007, 13:55:36
witzbold.
glaubst du ich würd fragen wenn ichs wüsste???

meikel (†)
30.08.2007, 15:28:31
witzbold.
glaubst du ich würd fragen wenn ichs wüsste???
Selber Witzbold. Woher soll hier jemand wissen, was Du da reingetippert hast?
Der Browser zumindest ist so hundgemein und schickt Dir den Kram in dem Zeichensatz, den Du Dir gewünscht hast. Und wenn da UTF-8 drin steht, dann darfste davon ausgehen, daß der Browser Dir genau das und eben kein ISO-trallala schickt.
Comprende?

N'Koto Zinde
30.08.2007, 15:29:48
<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />


das hier steht in meinen HEAD

meikel (†)
30.08.2007, 15:33:30
das hier steht in meinen HEAD
Fein. Und wo kommen dann die NICHT nach ISO-8859-1 kodierten Umlaute her?
Das heißt nach dem Absenden kommt nicht mehr 'ä' an sondern 'ä'

N'Koto Zinde
30.08.2007, 15:51:41
womit wir wieder am anfang wären.
ich weiß es nicht.

meikel (†)
30.08.2007, 17:42:47
womit wir wieder am anfang wären.
Jau, aber diesmal richtig:
1. wie sieht das Formulardokument komplett aus?
2. gibt es dafür ein Onlinebeispiel?
3. wie sieht das Script aus?
4. welche PHP Version?

N'Koto Zinde
02.09.2007, 00:44:43
ich hab des problem zufällig soeben gelöst! :-)

in meinem editor wurde dieses (und nur dieses) dokument als UTF-8 intepretiert. Unabhängig davon, was im HEAD steht. Offenbar wurde das irgendwo mir nicht bekannt mit übergeben und das ganze ding als UTF-8 Dokument behandelt.
Ich habs ungestellt und schon gings.

meikel (†)
02.09.2007, 14:35:39
:)