ugrás a tartalomhoz

PHP Mail Karakterkódolás

KardiWeb · 2011. Aug. 2. (K), 12.33
Sziasztok!

Lenne egy müködő php mail küldő kódom. Annyi vele csak a baj, mikor elküldöm a levelet és van benne ékezet akkor kriksz kraxok lesznek az ékezetek helyett. pl:öüüóúőéáűĂ

Mit hagyhattam ki és honnan?
A kód:
  1. <?php  
  2.         if(isset($_POST['submit'])) {  
  3.          error_reporting(E_NOTICE);  
  4.          function valid_email($str)  
  5.          {  
  6.          return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"$str)) ? FALSE : TRUE;  
  7.          }   
  8.          if($_POST['name']!='' && $_POST['email']!='' && valid_email($_POST['email'])==TRUE && strlen($_POST['comment'])>1)  
  9.          {  
  10.              $to = preg_replace("([\r\n])""", hexstr($_POST['receiver']));  
  11.           $from = preg_replace("([\r\n])"""$_POST['email']);  
  12.           $subject = "Üzenet az oldalrol: ".$_POST['name'];  
  13.              $message = $_POST['comment'];  
  14.             
  15.           $match = "/(bcc:|cc:|content\-type:)/i";  
  16.             if (preg_match($match$to) ||  
  17.                 preg_match($match$from) ||  
  18.                 preg_match($match$message)) {  
  19.               die("Header injection detected.");  
  20.             }  
  21.              $headers = "From: ".$from."\r\n";  
  22.               $headers .= "Reply-to: ".$from."\r\n";  
  23.   
  24.        if(mail($to$subject$message$headers))  
  25.              {  
  26.                  echo 1; //SUCCESS  
  27.              }  
  28.              else {  
  29.                  echo 2; //FAILURE - server failure  
  30.              }  
  31.          }  
  32.          else {  
  33.           echo 3; //FAILURE - not valid email  
  34.   
  35.          }  
  36.       }else{  
  37.          die("Direct access not allowed!");  
  38.        }  
  39.         function hexstr($hexstr) {  
  40.               $hexstr = str_replace(' '''$hexstr);  
  41.               $hexstr = str_replace('\x'''$hexstr);  
  42.               $retstr = pack('H*'$hexstr);  
  43.               return $retstr;  
  44.             }  
  45.      ?>  
Előre is köszönöm a segítségeteket!
 
1

Osztály

Poetro · 2011. Aug. 2. (K), 12.45
A fenti adatok UTF-8 kódolással érkeznek. Ekkor a legegyszerűbb, ha használsz egy email küldő osztályt, ami megoldja neked a karakterkódolási problémákat, valamint nem kell küzdened például a header injectionnel, mert azt is megoldja helyetted. Ilyen a PHPMailer vagy a SwiftMailer illetve a PEAR-es Mail és Mail_Mime kombinációja.
2

Gyors piszkálás: a fenti

kuka · 2011. Aug. 2. (K), 12.48
Gyors piszkálás: a fenti állomány 23. sorához beszúrni ilyent:
  1. $headers .= "MIME-Version: 1.0\r\n";  
  2. $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"// vagy amilyen kódolásúak a karaktereid  
Megoldás: PHP mail küldő osztályt használni, például PHPMailer.
3

Megvan a megoldás.

KardiWeb · 2011. Aug. 2. (K), 12.52
Kedves "Kuka"!

Nagyon szépen köszönöm a hozzászólásotokat! A te megoldásod tökéletes és működik! Mégegyszer nagyon szépen köszönöm a segítséget mind a kettötöknek!