如何使用PHP str_replace替换以$开头的值

时间:2013-07-12 12:42:15

标签: php

我正在我的网站上制作Feed功能,用户可以在其中显示操作。

我将不同的操作消息存储为

 {item:$user} added {var:$count} photo(s) to the album {item:$album_name}

在数据库中,因为我在运行时获得了不同的操作消息。

所以当我使用str_replace

$body =  "{item:$user} added {var:$count} photo(s) to the album {item:$album_name}";

$body =  str_replace("{item:$user}",$userName,$body);

它不会替换文本并显示原样,但是当我删除“$ user}”时,它会替换字符串“{item:”。

我的脚本中是否有任何问题,或者我必须使用某种特殊方法。

感谢。

4 个答案:

答案 0 :(得分:2)

当PHP解析你的str_replace语句时,由于你的“{item:$ user}”是双引号,PHP将在返回字符串之前尝试计算字符串中的变量和函数。所以它正在寻找$用户认为它是一个变量。尝试用单引号替换双引号,看看它是做什么的。

我还建议让你的模板占位符更简单,因为你只是使用字符串替换和硬编码的针。在您的示例中,{user}也可以代替{var:$ user}。或者更改替换方法以利用多部分占位符

答案 1 :(得分:1)

而不是这样做:

var $s = "$variable inside a string"

只需这样做(单引号):

var $s = '$variable inside a string'

这样它就不会用字符串中的变量替换字符串中的变量。当您使用双引号时,字符串中的变量将替换为其值。

答案 2 :(得分:0)

使用单引号:

$body =  str_replace('{item:$user}',$userName,$body);

答案 3 :(得分:0)

我也会给你与其他人相同的答案:

$var = 'EXAMPLE';
// double quotes take a string with variables, but interprents them 'gently'
echo " this is $var "; // will result in [ this is EXAMPLE ]

// Single quotes all a litteral string. This means it will not _parse_ the values (or functions)
echo ' this is $var '; // will result in [ this is $var ]

// If you want the dolarsign AND doublequotes, you have to escape
echo " this is \$var "; // will result in [ this is $var]