4

I am writing an email module for my web app that sends a html email to a user on completion of a task such as signing up. Now as the formatting of this email may change I've decided to have a template html page that is the email, with custom tags in it that need to be replaced such as %fullname%.

My function has an array in the format of array(%fullname% => 'Joe Bloggs'); with the key as the tag identifier and the value of what needs to replace it.

I've tried the following:

        $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);
    }

Is this the best way to do this? as only 1 tag get replaced at the moment... am I on the right path or miles off??

thanks...

4 Answers 4

5

I think the problem is in your foreach. This should fix it:

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

Alternatively, I think this should be more effective:

$file = @file_get_contents("email.html");
if($file) {
    $file = str_replace(array_keys($data), array_values($data), $file);
    print $file;
}
Sign up to request clarification or add additional context in comments.

Comments

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));

Comments

0

That looks like it should work, but I'd use "file_get_contents()" and do it in one big blast.

Comments

0

A slightly different approach is to use PHP's heredocs combined with string interpolation i.e.:

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

This avoids a separate file, and should make things beyond simple substitution easier later.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.