phpbar.de logo

Mailinglisten-Archive

[php] Mail-Formular - erlaubte Zeichen

[php] Mail-Formular - erlaubte Zeichen

René Thiel reti at rennkuckuck.de
Son Sep 26 14:45:40 CEST 2004


Hallo, (hoffe, die Zeichen (utf-8) kommen an)

wie kann man ein Mail-Formular DAU-sicher machen?

 $mailheader  = "From: $Vorname $Name<$Mail>\n";
 $mailheader .= "Content-Type: text/xml; charset=\"utf-8\"\n";
 $mailheader .= "Content-Transfer-Encoding: 8bit\n";

Wenn hier jemand unzulässige Zeichen eingibt, kann der Header
unbrauchbar werden. Das ist auch abhängig vom Mailserver.
So ist beispielsweise mein "Hamster" viel toleranter als der
Mailserver meines Providers.

Kennt jemand eine Liste zulässiger Zeichen für
"From: $Vorname $Name..."?


Habe jetzt eine funktionierende Lösung erstellt:

 $Name = preg_replace("/[!\"§\$%&\/\(\)=\?#'\+\*~\|<>°\^\{\[\]\}\\\,\.-;:_µ¡¢£¤¥¦§¨©«¬­®¯±²³´µ¶·¸¹»¼½¾¿×÷]/", "", $_POST["name"]);

Ich glaube jedoch, daß es besser wäre, per preg_replace die zulässigen
Zeichen zu definieren und den Rest zu entfernen.

Kennt jemand ein Script dafür oder kann mir sagen, wie das realisiere?


Auch der Mail-Text wird von mir sehr umständlich verarbeitet, so daß
in der Mail einmal alles in "utf-8" umgewandelt wird, um alle Zeichen
darstellen zu können und zusätzlich wird alles in reine ASCII-Form
umgewandelt (für Simple-Mail-Clients).

Auch hier gibt es sicher bessere Lösungen als (bitte nicht lachen):

$textutf-8=ersatzmailutf-8(htmlentities($text));
$textascii=ersatzmailascii(htmlentities($text));

wobei ich mit ersatzmailutf-8 alles wieder in die ursprünglich
eingegeben Zeichen zurückverwandle und mit ersatzmailascii
pures ASCII erzeuge:

function ersatzmailutf-8($ersatz)
{
 $suche = array(
   "'&#161;'",
   "'&#162;'",
   "'&#163;'",
...
   "'&iexcl;'",
   "'&cent;'",
   "'&pound;'",
...
   "'&auml;'",
   "'&Auml;'",
   "'&ouml;'",
   "'&Ouml;'",
   "'&uuml;'",
   "'&Uuml;'",
   "'&szlig;'");

 $ersetze = array(
   "¡",
   "¢",
   "£",
...
   "¡",
   "¢",
   "£",
...
   "ä",
   "Ä",
   "ö",
   "Ö",
   "ü",
   "Ü",
   "ß");

 $ersatz = preg_replace($suche, $ersetze, $ersatz);
 return $ersatz;
}

function ersatzmailascii($ersatz)
{
 $suche = array(
   "'&#161;'",
   "'&#162;'",
   "'&#163;'",
...
   "'&iexcl;'",
   "'&cent;'",
   "'&pound;'",
...
   "'&auml;'",
   "'&Auml;'",
   "'&ouml;'",
   "'&Ouml;'",
   "'&uuml;'",
   "'&Uuml;'",
   "'&szlig;'");

 $ersetze = array(
   "i",
   " Cent ",
   " Pound ",
...
   "i",
   " Cent ",
   " Pound ",
...
   "ae",
   "AE",
   "oe",
   "OE",
   "ue",
   "UE",
   "ss");

 $ersatz = preg_replace($suche, $ersetze, $ersatz);
 return $ersatz;
}


Wer hat sich damit schon einmal erfolgreich beschäftigt
oder kann mir einen Link nennen?


PS: mit html_entity_decode hatte ich keinen Erfolg...


Gruß
René Thiel (Rennkuckuck)
mailto:reti at rennkuckuck.de
-- 
http://rennkuckuck.de - Die Rumänien-Seiten
http://karpatenferien.de - Ferien in Rumänien!!!




php::bar PHP Wiki   -   Listenarchive