2014-10-16 20 views
-1

我使用帶有動態body字段的郵件,因此admin用戶可以構建它自己的BODY。但在身體上我需要有一些變數。管理員用戶的輸入的

示例:從[公司], 感謝用於登記

本文

尊敬的[名稱]將在表中插入。但是現在我想用這個輸入來構建一個自動郵件。所以$正文的內容應該是:

從$公司親愛的$名稱, 感謝您的註冊

這是我的代碼:

$inserted_text = addslashes($_POST['inserted_text']); 
    $patterns = array(); 
          $patterns[0] = '/[name]/'; 
          $patterns[1] = '/[company]/'; 

          $replacements = array(); 
          $replacements[1] = '$name'; 
          $replacements[0] = '$company'; 
          $inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 


$body = <html><head>...</head><body> $inserted_text_dynamic </body> 

mail($to, $subject, $body, $headers); 

但產量不順心?如何在我的$ body中設置$ name等內容?

+2

正則表達式'/ [name]// [company] /'可能沒有達到你期望的效果。您需要轉義方括號,否則它們是正則表達式字符類。 '/ \ [name \] /' – 2014-10-16 15:15:25

+0

您的模式與您所期望的不符。你會有更好的結果引用它。此外,你的索引是混合的。你可能會考慮使用模板語言來處理這樣的事情。 – 2014-10-16 15:16:06

+3

我不需要在這裏使用'preg_replace()' - 普通舊['str_replace()'](http://us2.php.net/manual/en/function.str-replace.php)支持數組參數,更適合用於像'[name]'這樣的靜態替換。 – 2014-10-16 15:17:05

回答

0

這是行不通的:

$replacements[1] = '$name'; 
$replacements[0] = '$company'; 

使用雙引號:

$replacements[1] = "$name"; 
$replacements[0] = "$company"; 

或無報價:

$replacements[1] = $name; 
$replacements[0] = $company; 

使用此:

$body = "<html><head>...</head><body> " . $inserted_text_dynamic . " </body>"; 

相反的:

$body = <html><head>...</head><body> $inserted_text_dynamic </body> 

,並刪除firts括號

$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 

這樣的:

$inserted_text_dynamic = preg_replace($patterns, $replacements, $inserted_text); 
+0

這工作,謝謝。只有[和]不被視爲口譯員。現在每個帶有NAME的單詞都會被更改,所以輸入[name]被轉換爲[$ name] – akkie 2014-10-16 16:21:11

0

有很多方法可以做到這一點,你可以用雙引號把它作爲

echo "Dear $name from $company, thanks for registering"; 

標誌着變量是自動給予有值,或者如果你想使用單引號,那麼你CA試試這個。

echo 'Dear '.$name. ' from '.$company. ', thanks for registering'; 
3
$replacements[1] = '$name'; 
$replacements[0] = '$company'; 

這不會在你想讓你的工作方式,因爲單引號抑制變量的擴張。

使用雙引號:

$replacements[1] = "$name"; 
$replacements[0] = "$company"; 

或沒有引號:

$replacements[1] = $name; 
$replacements[0] = $company; 

@MichaelBerkowski還正確地指出,你正在使用你的正則表達式模式方括號,但方括號元字符在正則表達式中,所以你應該逃避它們。或者選擇一個不同的字符來在電子郵件模板中分隔佔位符。或者使用固定字符串替換而不是正則表達式的函數。

0

有在這裏打球幾件事情 - 語法錯誤和不當的正則表達式。 Here是一個完整的解決方案示例。

$_POST['inserted_text'] = 'Dear [name] from [company], thanks for registering'; 
$name = 'foo'; 
$company = 'bar'; 
$inserted_text = addslashes($_POST['inserted_text']); 
$patterns = array(); 
$patterns[0] = '/\[name\]/'; // you have to escape square brackets in regex because they are special to regex 
$patterns[1] = '/\[company\]/'; 

$replacements = array(); 
$replacements[1] = $name; // removed quotes 
$replacements[0] = $company; // removed quotes 
$inserted_text_dynamic = (preg_replace($patterns, $replacements, $inserted_text)); 

$body = '<body>' . $inserted_text_dynamic . '</body>'; 
echo $body;