Hallo,
Ich bin mir leider nicht sicher warum unter folgenden Bedingungen
htmlentities eingesetzt wird.
Ausgang:
Ich versuche einen Formmailer Schritt für Schritt aufzubauen.
Obwohl es viele fertige und auch anpassbare Formmailer gibt möchte
ich dies aus folgenden Gründen tun:
1. Ich bin dabei mich in PHP einzuarbeiten, es zu lernen.
2. Wirklich gute Formmailer lassen sich nur dann entsprechend anpassen
und umsetzten wenn man versteht was man tut.
3. Einfache Formmailer lassen sich nicht entsprechend anpassen
4. Ich finde ein Formmailer ist eine gute Möglichkeit sich in PHP
einzuarbeiten, da er sich eben Schritt für Schritt aufbauen läßt und die
Möglichkeit bietet jeden Schritt in ein eigenes Script zu packen und dabei
doch nicht zu unübersichtlich wird.
Wie bei Anfängern üblich stieß ich ziemlich früh auf die 1. Probleme und konnte sie mit Forumshilfe überwinden.
Wobei der Formmailer noch lange nicht fertig ist und sicher noch der ein oder andere kommt.
Jetzt habe ich momentan z.B. so ein "Hä, warum denn das?" Problem.
Zur Verdeutlichung das Ausgangsscript:
und hier das von H2O überarbeitet Script:
Fast alles kann ich nachvollziehen, nur bei:
bin ich mir nicht sicher.
Die foreach Schleife verstehe ich noch, nur bei
stehe ich auf dem Schlauch.
Unklarheit:
Warum wird hier htmlentities verwendet?
Mein Problem hierbei ist nun folgendes:
Laut Manual wandelt htmlentities alle geeigeneten Zeichen in HTML-Code um.
html_entity_decode konvertiert alle html-Zeichen in ihren Uhrsprungscode.
Soweit das Manual.
Wenn ich nun
auf folgende Eingabe:
"was ergibt das <b>wohl</b> Günter?"
anwende, erhalte ich als Ausgabe:
genau das selbe wie mit
nur bei
gibt er mir
aus.
Die korrekte Darstellung von ü, ä, ö zu erreichen ist einfach, in ändere im
HTML-Kopf der Seite das Charset von Iso-8859-1 auf UTF-8 und das
Problem "Günter" ist erledigt.
Wende ich nun htmlentities an, erhalte ich die selbe Ausgabe wie unter ISO-8859-1.
Ich möchte aber ä, ö,ü korrekt dargestellt haben.
das heißt ich muss zur korrekten Ausgabe von ä, ö, ü, €, usw
anwenden, und erhalte damit:
Wird html_entity_decode verwendet ist die Ausgabe identisch mit $$key = $val.
Fazit:
Die Wirkungsweise und die Funktion scheine ich verstanden zu haben, aber
leider scheint mir der Grund für den Einsatz von htmlentities verborgen zu bleiben.
Kann mir bitte jemand sagen weshalb hier htmlentities angewand wird?
Ist htmletinities vielleicht eine notwendigkeit dafür wenn der Formmailer später abgesichert werden soll?
Momentan bin ich nämlich erst dabei meine Eingabefelder auf irgendeinen Inhalt hin zu überprüfen und noch nicht bei der Inhaltsprüfung.
Gruß
Martin
Ich bin mir leider nicht sicher warum unter folgenden Bedingungen
htmlentities eingesetzt wird.
Ausgang:
Ich versuche einen Formmailer Schritt für Schritt aufzubauen.
Obwohl es viele fertige und auch anpassbare Formmailer gibt möchte
ich dies aus folgenden Gründen tun:
1. Ich bin dabei mich in PHP einzuarbeiten, es zu lernen.
2. Wirklich gute Formmailer lassen sich nur dann entsprechend anpassen
und umsetzten wenn man versteht was man tut.
3. Einfache Formmailer lassen sich nicht entsprechend anpassen
4. Ich finde ein Formmailer ist eine gute Möglichkeit sich in PHP
einzuarbeiten, da er sich eben Schritt für Schritt aufbauen läßt und die
Möglichkeit bietet jeden Schritt in ein eigenes Script zu packen und dabei
doch nicht zu unübersichtlich wird.
Wie bei Anfängern üblich stieß ich ziemlich früh auf die 1. Probleme und konnte sie mit Forumshilfe überwinden.
Wobei der Formmailer noch lange nicht fertig ist und sicher noch der ein oder andere kommt.
Jetzt habe ich momentan z.B. so ein "Hä, warum denn das?" Problem.
Zur Verdeutlichung das Ausgangsscript:
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Formularausgabe</title>
</head>
<body bgcolor="#000000">
<p><font size="+3" color="#4b9e96"><strong>Kontaktformular </strong></font></p>
<p><font size="+2" color="#4b9e96"><strong>Ihre Mail: </strong></font></p>
<?php
$sent = isset($_POST['sent']) ? $_POST['sent'] : '';
$eMail = isset($_POST['eMail']) ? $_POST['eMail'] : '';
$vorname = isset($_POST['vorname']) ? $_POST['vorname'] : '';
$nachname = isset($_POST['nachname']) ? $_POST['nachname'] : '';
$betreff = isset($_POST['betreff']) ? $_POST['betreff'] : '';
$nachricht = isset($_POST['nachricht']) ? $_POST['nachricht'] : '';
if ($sent and $eMail)
{
global $eMail, $vorname, $nachname, $betreff, $nachricht;
echo "<br><p><font color = 4b9eff size = +1 <b>Gesendet am:</b><br>";
$Datum = date('D, d.m.Y');
$Uhrzeit = date('H:i:s');
echo "$Datum <br>";
echo "$Uhrzeit <br><p>";
echo "Von:<b> {$_POST['vorname']} </b>";
echo "<b>{$_POST['nachname']}</b><br><p>";
echo "Absender: <b>{$_POST['eMail']}</b><br><p>";
echo "<b>Betreff: </b>{$_POST['betreff']}<br><p>";
echo "<b>Ihre Nachricht:</b><br><p>";
echo "{$_POST['nachricht']}</font>";
include ("send.inc.php");
}
else {
echo "Eingabe fehlt";
}
?>
PHP-Code:
<?php
foreach($_POST as $key => $val){
$$key = htmlentities($val);
}
if (!empty($sent) and !empty($eMail))
{
printf("<font color='#4b9eff' size='+1'><b>Gesendet am:</b><br />\n%s<br />%s<br />Von:<b>%s %s</b><br />
Absender: <b>%s</b><br />\n<b>Betreff: %s</b><br />\n<b>Ihre Nachricht: </b><br />%s</font><br />\n",
date('D, d.m.Y'),
date('H:i:s'),
$vorname,
$nachname,
$eMail,
$betreff,
$nachricht);
include ("send.inc.php");
}
else {
echo "Eingabe fehlt";
}
?>
PHP-Code:
foreach($_POST as $key => $val){
$$key = htmlentities($val);
Die foreach Schleife verstehe ich noch, nur bei
PHP-Code:
$$key = htmlentities($val);
Unklarheit:
Warum wird hier htmlentities verwendet?
Mein Problem hierbei ist nun folgendes:
Laut Manual wandelt htmlentities alle geeigeneten Zeichen in HTML-Code um.
html_entity_decode konvertiert alle html-Zeichen in ihren Uhrsprungscode.
Soweit das Manual.
Wenn ich nun
PHP-Code:
foreach($_POST as $key => $val){
$$key = $val;
"was ergibt das <b>wohl</b> Günter?"
anwende, erhalte ich als Ausgabe:
was ergibt das wohl Günter?
PHP-Code:
foreach($_POST as $key => $val){
$$key = html_entity_decode($val);
PHP-Code:
foreach($_POST as $key => $val){
$$key = htmlentities($val);
was ergibt das <b>wohl</b> Günter?
Die korrekte Darstellung von ü, ä, ö zu erreichen ist einfach, in ändere im
HTML-Kopf der Seite das Charset von Iso-8859-1 auf UTF-8 und das
Problem "Günter" ist erledigt.
Wende ich nun htmlentities an, erhalte ich die selbe Ausgabe wie unter ISO-8859-1.
Ich möchte aber ä, ö,ü korrekt dargestellt haben.
das heißt ich muss zur korrekten Ausgabe von ä, ö, ü, €, usw
PHP-Code:
$$key = htmlentities($val, ENT_COMPAT, 'UTF-8');
was ergibt das <b>wohl</b> Günter?
Fazit:
Die Wirkungsweise und die Funktion scheine ich verstanden zu haben, aber
leider scheint mir der Grund für den Einsatz von htmlentities verborgen zu bleiben.
Kann mir bitte jemand sagen weshalb hier htmlentities angewand wird?
Ist htmletinities vielleicht eine notwendigkeit dafür wenn der Formmailer später abgesichert werden soll?
Momentan bin ich nämlich erst dabei meine Eingabefelder auf irgendeinen Inhalt hin zu überprüfen und noch nicht bei der Inhaltsprüfung.
Gruß
Martin
Kommentar