【问题标题】:Parsing values in php解析php中的值
【发布时间】:2014-07-18 19:30:22
【问题描述】:

所以我有一个表格,其中有电子邮件模板,以后可以提取这些电子邮件模板以发送电子邮件。

结构是:-

for_status     subject          message
 int             text           text

示例条目是:-

for_status = 1,
subject = Transaction Status Changed,
message = Hi $user->firstname, this is a test message.

好的,所以问题是,当我使用当前messagesubject 发送电子邮件时,它会显示在电子邮件Hi $user->firstname, this is a test message

而不是显示,Hi thefirstname here, this is a test message

我在同一页面上的$user 变量中成功获取了用户详细信息。 这里出了什么问题?

【问题讨论】:

  • 仅仅因为你在一些文本中有一个变量并不意味着什么。除非该字符串以某种方式执行,否则该变量只是一些看起来像变量的随机字符。
  • 您需要使用答案中提到的模板/占位符。 Thisand this问题可以提供一些想法。

标签: php mysql email


【解决方案1】:

当您说“电子邮件模板表”时,电子邮件模板的实际文本是否在某种数据库中?

如果是这种情况并且您在数据库中有$user->firstname,我很确定它会直接将其吐出。

【讨论】:

    【解决方案2】:

    您需要一些所谓的占位符。您需要决定将什么作为占位符,我个人使用以下内容:

    {%first_name%}, this is a test message.
    

    然后在您的 PHP 代码中,您只有一个占位符和值数组,如下所示:

    $arr = array(
       '{%first_name%}' => $user->firstname,
    );
    
    //and now replace the body
    $body = str_replace(array_keys($arr), $arr, $body);
    

    通过使用已经编写的库或使用 正则表达式 来正确解析,有更好的方法,但我会让你自己弄清楚。

    【讨论】:

    • 好的,这似乎有效。但这仅适用于 1 值。如果数组中有 3 个值,它似乎不起作用。
    • 您还需要有 3 个占位符。如果您的意思是 3 个具有不同值的相同占位符,是的,它不会起作用,因为它是一个数组,它的键是占位符,您不能拥有相同的键和不同的值
    【解决方案3】:

    PHP 只会对您编码到您自己的 PHP 文件中的字符串执行替换,而不是那些来自数据库或任何其他来源的字符串。如果是这样,那将是一个巨大的安全风险!

    您需要自己对模板执行替换。

    // $message is: Hi %{userFirstName}, this is a test message.
    $message = str_replace('%{userFirstName}', $user->firstname, $message);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多