php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Hochkommata & Anführungszeichen


 
snook
19-08-2003, 13:57 
 
Also benutze bei Editierfunktionen wie z.B. eines Textes immer Hochkommata (').

Nun, vor dem INSERT benutze ich das Folgende:

$text = addslash($text);

Und beim Editieren siehts dann so aus:

echo "<input type='text' name='text' value='$text'>";

Enthält der Wert $text nun ein Hochkommata, wird nach diesem Hochkommata, logischer Weise, der restliche Text nicht angezeigt. Nun benutze ich die allseits bekannten Escapes (\"), wird der das Hochkommata angezeigt.

Doch, enthält $text nun ein Hochkommata (') und ein Anführungszeichen ([/b]"[/b]), wird der Datensatz zwar richtig gespeichert, aber nachdem man wieder auf der Editierseite ist, hört es nun nach dem Hochkommata auf, das heisst, dass keine Anführungszeichen angezeigt werden.

Das Problem habe ich nun beschrieben, was kann man da tun ?

 
DSB
19-08-2003, 14:08 
 
Original geschrieben von snook
echo "<input type='text' name='text' value='".addslashes($text)."'>";

Und so?

 
slarti
19-08-2003, 14:18 
 
kenn ich :D
bei html hat escapen keinen sinn, deshalb hab ich die " einfach durch &.quot; ersetzt...

 
snook
19-08-2003, 14:24 
 
@DSB:

Nein, funktioniert leider nicht.

@slarti:

Meinst du, dass man bevor der Einsetzung der Variablenwerte in das Valueattribut, die Anführungszeichen durch &quot; ersetzen soll ?

Zum Beispiel so:

$text = str_replace("\"","&quot;",$text);

?

 
Frischling
19-08-2003, 14:27 
 
zum speichern in der datenbank verwende ich mysql_escape_string(), vielleicht hilft Dir das:



$text = mysql_escape_string($text);



(Details siehe www.php.net)

 
slarti
19-08-2003, 14:34 
 
$text = str_replace("\"","&.quot;",$text);
...genau so.
allerdings wird das dann auch so inne db geschrieben, es sei denn,
du ersetzt sie vor dem speichern wieder...

 
snook
19-08-2003, 15:09 
 
Original geschrieben von slarti
...genau so.
allerdings wird das dann auch so inne db geschrieben, es sei denn,
du ersetzt sie vor dem speichern wieder...

Hm, das hat mir jetzt eigentlich weniger geholfen, weil du mich vielleicht nicht ganz verstanden hast. Dieser str_replace ist eigentlich nur dazu gut ihn in die DB zu schreiben. Im Valueattribut jedoch, ist es keine gute Möglichkeit, da dann im Inputfeld das "&.quot;" ausgeschrieben steht und nicht durch ein Anführungszeichen ersetzt wird, was mein eigentliches Problem ist.

Kurzgefasst:

- Der MySQL INSERT funktioniert
- Die Variablenübertragung in das Valueattribut ist fehlerhaft

 
slarti
19-08-2003, 15:39 
 
...
dann hast du dein problem nicht richtig verstanden...
dein value-attribut is genau bei dem anführungszeichen zuende, mit dem es auch angefangen hat. ergo, wenn dieses in deinem $text vorkommt, wird er dort abgeschnitten,
egal ob mit backslash oder nicht...
das heißt, du mußt genau diese anführungszeichen aus deiner variable entfernen, bevor
du sie in deinem input-value ausgibst.
und wenn dir &.quot; nicht gefällt, nimm halt chr(148) oder die anführungszeichen,
die du in deinen tags nicht benutzt...

 
wahsaga
19-08-2003, 16:29 
 
Original geschrieben von snook
Im Valueattribut jedoch, ist es keine gute Möglichkeit, da dann im Inputfeld das "&.quot;" ausgeschrieben steht und nicht durch ein Anführungszeichen ersetzt wird, was mein eigentliches Problem ist.
was erzählst du hier für einen unsinn?

<input type="text" value="&amp;quot;und ob!&amp;quot;">
ergibt ein textfeld, das mit
"und ob!"
vorbelegt ist.

 
DSB
19-08-2003, 19:54 
 
Dann sollte das hier klappen:


echo "<input type='text' name='text' value='".htmlspecialchars($text)."'>";


Da werden direkt alle "gefährlichen" Zeichen umgewandelt.

 
snook
19-08-2003, 20:47 
 
@ slarti:

&.quot; geht nicht, dafür aber & quot;. Habe mich vom Punkt etwas irritieren lassen, aber jetzt funktionierts. Vielen Dank.

@ DSB:

Nein, funktioniert leider auch nicht. :)

 
DSB
19-08-2003, 22:00 
 
???
Warum denn nicht? Die Funktion htmlspecialchars wandelt doch alle Zeichen in ihre HTML-Codes um. Wie sieht denn dann die Zeile (im Quellcode) aus?
Poste bitte mal ein Beispiel mit richtigem Inhalt.
Oder kommen die Slahes (die Du vorher ja eingefügt hast) störend ins Bild?
Dann müsste der Aufruf so aussehen htmlspecialchars(stripslashes($text)) .


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:57 Uhr.