Entwickler-Ecke

Off Topic - PHP - Anführungszeichen in einer Textarea


jakobwenzel - So 17.07.05 13:52
Titel: PHP - Anführungszeichen in einer Textarea
Wenn in einer HTML-Datei ein Formular mit einer Textarea ist, welches per POST verschickt wird, kommen Anführungszeichen als \" an. Wie kann ich aus \" wieder " machen?
Hier mal ein Beispielcode:


Senden.html
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<html>
 <head>
  <title>Senden</title>
 </head>
 <body>
  <form action="Empfang.php" METHOD=POST name="formular">
   <textarea name="text">"Test"</textarea>
   <input type="submit">
  </form>
 </body>
</html>



Empfang.php
1:
2:
3:
4:
<?php
  $zeile=$_POST["text"];
  echo $zeile;
?>


(Ausgabe: \"Test\")

Wieso macht er das? Und wie kann man das Abstellen?

P.S.: Ich benutze Apache 2.0.48 mit PHP 5.0.4

Moderiert von user profile iconChristian S.: code-Tags hinzugefügt.


DaRkFiRe - So 17.07.05 14:09

$zeile = strreplace("\\\"","\"",$zeile);

aus \\\" wird dann \"
und aus \" wird "

Das wird ersetzt - et voilà.


GTA-Place - So 17.07.05 14:17

Das wird vor allem aus Sicherheitsgründen gemacht.

Stell dir vor, dein Eintrag in die DB lautet:

Quelltext
1:
mysql_query("INSERT INTO my_gb (name, text) VALUES ('". $name ."', '". $text ."')");                    

Das könnte dann so aussehen:

Quelltext
1:
mysql_query("INSERT INTO my_gb (name, text) VALUES ('GTA-Place', 'Hallo')");                    

Aber auch so:

Quelltext
1:
2:
3:
4:
mysql_query("INSERT INTO my_gb (name, text) VALUES ('Hacker', 'bla')");
$sql = mysql_query("SELECT * FROM forum_user");
while ($result = mysql_fetch_assoc($sql))
  echo($result['user_name'] .' - '. $result['user_pw']);

(was gehighlightet ist, ist der im GB (oder sonstwo) eingetragene Text)

Und was würde der Hacker bekommen? Alle User + Passwörter. Und das wollen wir ja nicht.
Deswegen werden ', ", etc. geparst.


StefanH - So 17.07.05 14:32

user profile iconjakobwenzel hat folgendes geschrieben:
Wenn in einer HTML-Datei ein Formular mit einer Textarea ist, welches per POST verschickt wird, kommen Anführungszeichen als " an. Wie kann ich aus " wieder " machen?


mit stripslashes($_POST['text']) :)


jakobwenzel - So 17.07.05 14:36

Auf die Idee mit str_replace bin ich auch schon gekommen, sogar mit den gleichen Parametern, aber es hat irgendwie nicht funktioniert. Aber das mit Stripslashes geht! Danke!! :D