【问题标题】:PHP - concatenate string from database [closed]PHP - 连接数据库中的字符串[关闭]
【发布时间】:2013-05-14 13:27:44
【问题描述】:

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

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

//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}

【问题讨论】:

  • $email 包含什么?当你从 db 表中获取时
  • 这样的? str_replace("{$email}", $email, $dbstring);
  • 你的问题还不清楚
  • 我想字符串 "Hi {$email}, bla bla bla" 被用在了双引号中,所以变量 $email 被自动用作变量而不是文本的一部分,但在这种情况下你正在使用单引号中的此文本,因此会出现问题。
  • 不,对不起。但如果我的情况是我有两个以上的字符串要替换。例如“嗨 {$email},这是你的 {$username}”。我应该循环str_replace吗?我忘了解释这个

标签: php codeigniter concatenation


【解决方案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
?>

【讨论】:

  • 谢谢雨果,如果我有两个以上的字符串要替换怎么办?例如“嗨 {$email},这是你的 {username}”。如果我必须循环 str_replace?
  • 如果是两个(或几个)我会使用str_replace('{$username}', $username, str_replace('{$email}', $email, $text););。或用$output 将它们分开,并称它们为另一个。如果您有很多变量,您可以开始考虑其他选项
  • 谢谢你的回答
【解决方案2】:

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

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

输出

test@mail.com

【讨论】:

  • 我很确定他想要将 $text 中的 {$email} 替换为 $email 的值。虽然这不是写得最好的问题。
【解决方案3】:

这样是不对的……你可以这样做。

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

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

}

【讨论】:

  • 为什么这是正确的方法而不是 {$email} ?请你解释一下。
  • 因为你不能在字符串中调用变量。
【解决方案4】:

我假设你的$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2010-09-29
    • 2013-05-26
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多