PHP - textarea的换行符不起作用

时间:2015-07-26 05:40:13

标签: php preg-replace newline str-replace

我今天编写了一个脚本,用于格式化我的表单中的HTML电子邮件中的文本。在我输入电子邮件的邮件正文的地方,我使用了textarea。我一整天都在努力弄清楚当我按下enter替换textarea中的新行时,如何将其添加到电子邮件中。

到目前为止,我已尝试str_replace()preg_replace()nl2br()

我甚至将所有三个组合成一个代码,但这甚至没有效果。

有人可以告诉我为什么当我的textareas有换行符时,我的电子邮件中没有收到任何<br>个标签吗?

PHP代码:

function replaceText($msg) {
$replaceableText = array(
  // Emoticons to replace //
  'xD'  => '<img src="emoticons/devil.png" height="18" width="18">',
  '>:)' => '<img src="emoticons/devil.png" height="18" width="18">',
  'x('  => '<img src="emoticons/angry.png" height="18" width="18">',
  ':((' => '<img src="emoticons/cry.png" height="18" width="18">',
  ':*'  => '<img src="emoticons/kiss.png" height="18" width="18">',
  ':))' => '<img src="emoticons/laugh.png" height="18" width="18">',
  ':D'  => '<img src="emoticons/laugh.png" height="18" width="18">',
  ':-D' => '<img src="emoticons/laugh.png" height="18" width="18">',
  ':x'  => '<img src="emoticons/love.png" height="18" width="18">',
  '(:|' => '<img src="emoticons/sleepy.png" height="18" width="18">',
  ':)'  => '<img src="emoticons/smile.png" height="18" width="18">',
  ':-)' => '<img src="emoticons/smile.png" height="18" width="18">',
  ':('  => '<img src="emoticons/sad.png" height="18" width="18">',
  ':-(' => '<img src="emoticons/sad.png" height="18" width="18">',
  ';)'  => '<img src="emoticons/wink.png" height="18" width="18">',
  ';-)' => '<img src="emoticons/wink.png" height="18" width="18">',
  // Line breaks to replace //
  '\n' => '<br>',
  '\r' => '<br>',
  '\r\n' => '<br>',
  '\n\r' => '<br>',
  PHP_EOL => '<br>',  
  // Filter negative words //
  'badword1' => '********',
  'badword2' => '********',
  // HTML to convert to HTML with inline styles //
  '<h1>' => '<h1 style="color: #fff;">'
);
foreach($replaceableText as $replace => $replacedWith) {
    $msg = str_replace($replace, $replacedWith, $msg);
}
$msg = preg_replace( "/\r|\n/", "", $msg );
$msg = nl2br($msg);
return $msg;
}

请注意,如果可能的话,我希望保持尽可能接近我的脚本。正如您所看到的,我正在使用它来替换很多东西,这很容易使用。

这只是一个测试脚本,因此我要替换的每一段数据都尚未输入。

由于

1 个答案:

答案 0 :(得分:1)

用数组中的双引号(“)替换单引号(')。

$replaceableText = array(
  // Emoticons to replace //
  "xD"  => '<img src="emoticons/devil.png" height="18" width="18">',
  ">:)" => '<img src="emoticons/devil.png" height="18" width="18">',
  "x("  => '<img src="emoticons/angry.png" height="18" width="18">',
  ":((" => '<img src="emoticons/cry.png" height="18" width="18">',
  ":*"  => '<img src="emoticons/kiss.png" height="18" width="18">',
  ":))" => '<img src="emoticons/laugh.png" height="18" width="18">',
  ":D"  => '<img src="emoticons/laugh.png" height="18" width="18">',
  ":-D" => '<img src="emoticons/laugh.png" height="18" width="18">',
  ":x"  => '<img src="emoticons/love.png" height="18" width="18">',
  "(:|" => '<img src="emoticons/sleepy.png" height="18" width="18">',
  ":)"  => '<img src="emoticons/smile.png" height="18" width="18">',
  ":-)" => '<img src="emoticons/smile.png" height="18" width="18">',
  ":("  => '<img src="emoticons/sad.png" height="18" width="18">',
  ":-(" => '<img src="emoticons/sad.png" height="18" width="18">',
  ";)"  => '<img src="emoticons/wink.png" height="18" width="18">',
  ";-)" => '<img src="emoticons/wink.png" height="18" width="18">',
  // Line breaks to replace //
  "\n" => '<br>',
  "\r" => '<br>',
  "\r\n" => '<br>',
  "\n\r" => '<br>',
  PHP_EOL => '<br>',  
  // Filter negative words //
  "badword1" => '********',
  "badword2" => '********',
  // HTML to convert to HTML with inline styles //
  "<h1>" => '<h1 style="color: #fff;">'
);

我之前遇到过同样的问题。单引号的新行(\ n)不起作用,但双引号。