E-mail Formular senden, ohne \\n \\r 's

supersalzi

Erfahrenes Mitglied
Hey,

ich habe ein etwas dämliches Prblem mit meinem Email Script. Ich bilde mir ein das es noch nicht immer da war, habe aber eigentlich nichts geändert.

Wenn ich das Formular mittels PHP abschicke, kommt in meinem gmail account sowas raus:
Code:
was soll denn das\\r\\n\\r\\nnun ja\\r\\n\\r\\nnoch mal \\r\\n\\r\\nschon gu\\r\\nt\\r\\n\\r\\n

Muss ich den per POST übergebenen String "putzen", bevor er per mai(); verschickt wird?
Danke!
 
Ich verarbeite die Daten eigentlich gar nicht groß...

PHP:
<?php
function noNewLine( $string ) // reinigt email header
{
	$string = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",  $string );
	$string = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $string );
	$string =  preg_replace('/\x0A|\x0D\x0A|\x0D/s', '', $string); //entfernt Newliner \n 
    return $string;
} 
  
require_once "config/confic_mailmanager.php";  // enthält emailadressen der möglichen empfänger

$redirect = $check_redirect[$_POST["redirect"]]; //im Formular gesetzes ziel wird umgewandelt

// Robot Check
// - Prüft formkey
// - Zeitsperre
// - Falschausfüllung

include_once 'form_key.inc.php'; // benutzt die funcion validFormKey()

if(!empty($_POST["url"]) OR validFormKey($_POST["link"]) == "invalid" ){ 		// input type="hidden" name="url" value="" muss leer sein -- input type="hidden" name="link" value="$CODE" enthält Code aus scripts/form_key.inc.php
	$msg = "err1";
	unset($_POST);

}elseif(validFormKey($_POST["link"]) == "valid" && empty($_POST["url"])) {

	// Prüft email adresse
	$pruefung = array(
			'email' => '/^[\w.+-]{2,64}\@[\w.-]{2,255}\.[a-z]{2,6}$/',
	   		/*'subject' => '/^[[:print:]]{3,}$/',*/
			);
	if(preg_match($pruefung["email"], $_POST["email"])){
		$email = noNewLine( $_POST["email"] );
	}else{
		unset($_POST);
		$msg = "err2";
	}
}else{
	$msg = "err";
}

$name = noNewLine( $_POST["name"] );
$name_fam = noNewLine( $_POST["name_fam"] );
$subject = noNewLine( $_POST["subject"] );
$text = $_POST['text'];
$info = $_POST["info"];			//  Felder mit dem Name="Info", um einzelne Werte zu übermitteln
$recipient =  $_POST["recipient"]; //noNewLine( $_POST["recipient"]); // aus: input type="hidden" name="recipient" => kontrolle in confic_mailmanager.php
// $_POST["recipient"];
if(!empty($info)){
	$info = "INFO: $info";
}else{
	$info = "";
}

if(!empty($text)){
	$text = "Text:\n
$text";
}else{
	$text = "";
}


$recipient = $check_to["$recipient"]; // im array $check_to in confic/confic_mailmanager.php Wert hohlen

$to = "\"feedback form\" <". $recipient .">";

	$from = "\"$name\" <$email>";

	$reply = "\"$name\" <$email>";

	$subject = $subject;


	$message = "
Von: $name $name_fam
Email: $email \n
Subject: $subject

$text

$info\n

";
	

$headers .= "From: $from\r\n";
$headers .= "Reply-To: $reply\r\n";

if(empty($msg)){									// msg enthält die Fehlermeldungen
	mail($to, $subject, $message, $headers);
	$msg = "ok";
	

}



header("Location: $redirect&msg=$msg");
exit;

?>
 
soory, nochmal ich:

Ich übergebe den Text ja eigentlich nur per POST..

ich habe es jetzt schon mal so probiert:
PHP:
$text = nl2br(stripslashes(htmlspecialchars($_POST['text'])));
geht aber auch nicht.

Ich habe mal nachgeschaut, das Problem ist noch nicht immer da früher waren Zeilenumbrüche wo jetzt ein \n steht, etc.
wie kann das sein?
 
auch
PHP:
$text = trim($_POST['text']);
löst das Problem nicht.
Ich verstehe das nicht, denn ich hatte bei keinem Formular jemals solche Probleme mit den Steuerzeichen.
Ich möchte sie ja nicht unbedingt vernichten, sondern die email soll einfach genau so aussehen wie der eingegebene Text .
 
danke gumbo, die Frage war richtig. (Und woher genau kommen die?)

Ich schicke das Kontaktformular an ein script, welches die POST-Daten in ein neuen Formular mit nur "hidden" Feldern schreibt, welches der user nochmal absenden muss (Spamschutz- funktioniert bis jetzt auch).

Dort hatte ich leider eine Funktion zum Daten überprüfen angewendet, die den Fehler verursachte.
Hier die Funktion:
PHP:
function cleanPara_sql($param) { 
	$param = stripslashes($param);
	$param = mysql_real_escape_string($param ); // 2.argumet für mysql_real_escape_string , $sql_connection 
return $param;
}
ohne dies geht es wunderbar.

Danke!
 
Zurück