用php替换文件中的字符串

时间:2009-03-28 21:45:28

标签: php parsing

我正在为我的网络应用编写一个电子邮件模块,该模块会在完成注册等任务后向用户发送HTML电子邮件。现在,由于此电子邮件的格式可能会发生变化,因此我决定使用模板html页面作为电子邮件,其中包含需要替换的自定义标记,例如%fullname%。

我的函数有一个数组格式的数组(%fullname%=>'Joe Bloggs');使用密钥作为标记标识符以及需要替换它的值。

我尝试了以下内容:

        $fp = @fopen('email.html', 'r');

    if($fp)
    {
      while(!feof($fp)){

      $line = fgets($fp);                 

      foreach($data as $value){

          echo $value;
          $repstr = str_replace(key($data), $value, $line);           

      }


      $content .= $repstr;

      }
      fclose($fp);
    }

这是最好的方法吗?因为目前只有1个标签被取代......我是在正确的道路上还是在数英里之外?

感谢...

4 个答案:

答案 0 :(得分:5)

我认为问题在于你的问题。这应该解决它:

foreach($data as $key => $value){
    $repstr = str_replace($key, $value, $line);               
}

或者,我认为这应该更有效:

$file = @file_get_contents("email.html");
if($file) {
    $file = str_replace(array_keys($data), array_values($data), $file);
    print $file;
}

答案 1 :(得分:2)

//read the entire string
$str=implode("\n",file('somefile.txt'));

$fp=fopen('somefile.txt','w');
//replace something in the file string - this is a VERY simple example
$str=str_replace('Yankees','Cardinals',$str);

//now, TOTALLY rewrite the file
fwrite($fp,$str,strlen($str));

答案 2 :(得分:0)

看起来应该可行,但我会使用“file_get_contents()”并在一次大爆炸中完成。

答案 3 :(得分:0)

稍微不同的方法是使用PHP的heredocs和字符串插值,即:

$email = <<<EOD
<HTML><BODY>
Hi $fullname,
  You have just signed up.
</BODY></HTML>
EOD;

这样可以避免使用单独的文件,并且可以使以后的简单替换变得更容易。