html_entity_decode vs. htmlentities

FAD

Mitglied
Ich habe heut ein Kontaktformular geschrieben. Ganz einfach angefangen und dann nach und nach verschiedene Sachen eingebaut.

Zuerst hatte ich Probleme mit Umlauten. Gesucht und html_entity_decode gefunden.
Gefreut.
Dann dachte ich html sollte man deaktivieren. gesucht und htmlentities gefunden. Gefreut.
Nach einer Weile fällt mir doch auf, dass die Umlaute wieder genau das machen was sie nicht sollen.

Jetzt bin ich mir bewusst geworden, dass die beiden Befehle irgendwie zusammen nicht funktionieren. Ihr lacht jetzt bestimmt, aber ich saß heut den ganzen tag an dem Mist und komme jetzt einfach nicht weiter.

Hier ist mal der Code. Ist durch das ganze rumprobieren bestimmt bisschen merkwürdig. Aber naja...
HTML:
<form id="formular" name="formular" method="post" action="kontakt_danke.php">
                    <table width="100%" border="0" cellpadding="0">
                        <tr>
                          <td width="80" valign="top" class="Stil12">Name:</td>
                          <td><label>
                            <input name="name" type="text" class="eingabefeld" id="name" size="40" />
                          </label></td>
                        </tr>
                        <tr>
                          <td width="80" valign="top" class="Stil12">Email:</td>
                          <td><label>
                            <input name="email" type="text" class="eingabefeld" id="email" size="40" />
                          </label></td>
                        </tr>
                        <tr>
                          <td width="80" valign="top" class="Stil12">Betreff:</td>
                          <td>&nbsp;</td>
                        </tr>
                        <tr>
                          <td width="80" valign="top" class="Stil12">Nachricht:</td>
                          <td><label>
                            <textarea name="nachricht" cols="50" rows="10" class="eingabefeld" id="nachricht"></textarea>
                          </label></td>
                        </tr>
                        <tr>
                          <td width="80" valign="top" class="Stil12">&nbsp;</td>
                          <td><label>
                            <input type="submit" name="button" id="button" value="Senden" />
                            <input type="reset" name="button2" id="button2" value="Löschen" />
                          </label>
                          
						  
                          </td>
                        </tr>
                        <tr>
                          <td width="80" valign="top" class="Stil12">&nbsp;</td>
                          <td>&nbsp;</td>
                        </tr>
                      </table>
                      
                        </form>
PHP:
<?php 
						$name=$_POST["name"];
						$email=$_POST["email"];
						$nachricht=$_POST["nachricht"];
						
						if ((empty($name))||(empty($email))||(empty($nachricht)) )
					 	{
						echo "<br>- - - A C H T U N G - - -<br><br>Ihr Eingaben waren leider unvollständig.<br>Wir bitten Sie alle Felder auszufüllen."
					 	?>
					 	<br /><br /><a href="javascript:history.back()">Zurück zum Kontakt-Formular</a>
						<?PHP
                        }
						else
						{
						$message = "<html><body>Mit dem Website-Kontakt-Formular wurde folgendes gesendet:<br><br><u>Name:</u><br> " .
						utf8_decode(html_entity_decode(stripslashes($name))) . "<br><br><u>Email:</u><br>" .
						utf8_decode(html_entity_decode(stripslashes($email))) . "<br><br><u>Nachricht:</u><br></body></html>" .
						utf8_decode(htmlentities(stripslashes(html_entity_decode($nachricht))));
						$header="From:$email<$emai>\n";
						$header .= "Content-Type: text/html";
						mail("blabla", "Nachricht von der Website", $message, $header); 
						echo "<br><br>Vielen Dank ".(html_entity_decode(stripslashes($name)))."<br><br>Ihre Nachricht:<br><br><i>".(html_entity_decode(stripslashes($nachricht)))."</i><br>	<br>...wurde an uns gesendet.";
						}
						?>

Wäre über Hilfe sehr dankbar. Wollte das eigentlich allein probieren, aber habe mir eine deathline bis 00.00Uhr gesetzt.

Liebe Grüße René
 
Moin,
Jetzt bin ich mir bewusst geworden, dass die beiden Befehle irgendwie zusammen nicht funktionieren.

Sie funktionieren schon zusammen, aber nochmal dargelegt, was sie machen:

htmlentities: wandelt Zeichen in ihre Entitäten um, sofern vorhanden
aus " wird so bspw. &quot;

html_entity_decode: Macht genau das Gegenteil, also bspw. aus &quot; werden wieder Anführungszeichen....beides nacheinander auf denselben String angewendet, hebt sich somit wieder auf und hat als Ergebnis den Original-String.

Weiterhin:
Code:
utf8_decode(html_entity_decode(stripslashes($name)))
html_entity_decode() liefert standardmässig einen Latin1-kodierten String, utf8_decode() wandelt jedoch einen UTF8-String nach Latin1um...macht also auch nicht viel Sinn.

Auch wäre es gut zu wissen. worin genau die Probleme mit den Umlauten bestehen....in der Mail, die gesendet werden soll, oder in der Seite, die angezeigt wird.
 
Das eigentliche Problem ist behoben.
Ich habe jetzt htmlspecialchars in jeden Ausgabe-String eingefügt. Damit wars dann weg. Sowohl bei der Web-Ausgabe als auch bei den Emails. Ob das jetzt so programmiertechnisch gut ist weis ich nicht.

PHP:
utf8_decode(htmlspecialchars(html_entity_decode(stripslashes($name))))

Nach deinem Post kann man den
HTML:
utf8_decode
Befehl weglassen. Oder?
Außerdem brauche ich wahrscheinlich das
HTML:
stripslashes
jetzt auch nicht denn ich benutze ja auch vorher nirgens
HTML:
addslashes
. Richtig?


@Da_Chris
Ich bin kein php Profi oder sowas. Mit solchen kurzen Kommentaren kann ich nicht wirklich was anfangen. Ich saß gestern den ganzen Tag und habe mit Hilfe von einem PHP5 Buch so ein Kontaktformular das erste mal von Grund auf selbst programmiert. Das das mit den Umlauten ein utf8 Problem sein könnte habe ich mir auch schon gedacht, aber wenn man eine Sprache nicht fließend spricht, dann fällt es einem manchmal nicht so leicht das zu sagen was man will. Wenn du verstehst was ich meine.
Für mich ist es wichtig die Sachen zu verstehen und nicht ein Kontaktformular zu schreiben. Denn die gibt es ja zu Massen fertig im Netz.

LG René
 
Ich schau mir heut Nachmittag mal die Zwei Seiten an und codiere alles auf uft8. Ich denke aber das meiste müsste schon so sein. Mal schauen.

Code:
html_entity_decode
...habe ich nur drin damit html eingaben gesperrt werden. Bzw. eben im Ursprungsformat wieder gegeben werden und nicht dargestellt werden.

Würde das allein durch
Code:
stripslashes
auch schon passieren? Ich dachte da wird nur bei " " ' ' und so was ein / davor gestellt.

LG René
 
stripslashes stellt keine \ davor, sondern entfernt sie.

Die Backslashes müssen nicht unbedingt von dir oder von Benutzereingaben stammen, sie können auch durch den Server entstehen, wenn die PHP-Einstellung gpc_magic_quotes aktiviert ist....dann escaped PHP die von dir genannten Zeichen in den Benutzervariablen GET POST UND COOKIE
 
Zurück