-2

我有发送电子邮件注册的字符串。此字符串存储在数据库中。

当我用我的模型加载字符串时。

//string from db
Hi {$email} , bla bla bla

我的控制器示例。

  some function (){
      $text = $this->Some_model->get_string();

      // this var get from post
      $email = 'foo@mail.com'
      echo $text;
  }

并且字符串中没有任何变化。使用 str_replace 我无法获得这样的输出。

嗨 foo@mail.com,bla bla bla

如果我的情况。我有两个或多个字符串要替换?

例子

 Hi {$email}, this is your {$username}
4

4 回答 4

1

PHP 不会神奇地检查每个字符串是否包含可以执行的代码。如果您在数据库中的字符串实际包含Hi {$email} , bla bla bla,那么 PHP 将保持原样。

因此,您需要手动覆盖字符串中的值以匹配实际值。最安全的方法是简单的str_replace

<?php
$string = 'Hi {$email} , bla bla bla';
$email = 'foo@example.com';
$output = str_replace('{$email}', $email, $string);
$output = str_replace('{$username}', $username, $output );
echo $output;
//Hi foo@example.com , bla bla bla
?>

或在您的代码中

<?php
some function (){
    $text = $this->Some_model->get_string();
    $email = 'foo@mail.com';
    echo str_replace('{$username}', $username, str_replace('{$email}', $email, $text));
   //Hi foo@mail.com , bla bla bla
}
?>

如果在放入数据库之前创建字符串(带双引号),则值{$email}将被更改

<?php
$email = 'foo@mail.com';
$text = "Hi {$email} , bla bla bla"; //notice the double quotes, single qoutes wont work
echo $text;
//Hi foo@mail.com , bla bla bla
?>
于 2013-05-14T13:36:51.230 回答
0

这种方式是不正确的......你可以这样做。

function emailString(){
  $text = "Hi __EMAIL__  , bla bla bla";

   $text = str_replace('__EMAIL__','foo@mail.com');
  echo $text;

}

于 2013-05-14T13:33:55.677 回答
0

假设你有这样的字符串'test',你的函数应该是这样的

function get_email_string(){
      $text = $this->Some_model->get_string();
      $email = '@mail.com'
      echo $text.$email;
}

输出

test@mail.com
于 2013-05-14T13:31:38.917 回答
0

我假设你$textHi {$email} , bla bla bla因为你写了//string from db你可以使用str_replace你想要的输出

$email = 'foo@mail.com'
echo str_replace('{$email}', $email, $text);

这会出来

Hi foo@mail.com , bla bla bla
于 2013-05-14T13:36:23.357 回答