如何替换字符串中的占位符?

时间:2012-01-03 21:31:04

标签: php

不太确定如何说出这个问题,但我会举一个例子。

$string = 'Hey, $name. How are you?'; 

发布此字符串时,$name不会更改。我怎样才能做到这一点,所以我可以把+name+这样的东西改成名字。我已经尝试过搜索但我不知道该搜索什么,所以我没有运气。它可能很简单,但我只是在消隐。 感谢

4 个答案:

答案 0 :(得分:19)

您可以使用占位符和str_replace。或者使用PHP的内置sprintf并使用%s。 (从v4.0.6开始,你可以根据需要交换参数的顺序。)

$name = 'Alica';

// sprintf method:
$format = 'Hello, %s!';
echo sprintf($format, $name); // Hello, Alica!

// replace method:
$format = "Hello, {NAME}!";
echo str_replace("{NAME}", $name, $format);

并且,对于任何想知道的人,我明白这是模板字符串的问题,而不是PHP的集成连接/解析。我只是假设保持这个答案,因为我仍然不能100%确定这个OP的意图

答案 1 :(得分:11)

I've always been a fan of strtr.

$ php -r 'echo strtr("Hi @name. The weather is @weather.", ["@name" => "Nick", "@weather" => "Sunny"]);'
Hi Nick. The weather is Sunny.

The other advantage to this is you can define different placeholder prefix types. This is how Drupal does it; @ indicates a string to be escaped as safe to output to a web page (to avoid injection attacks). The format_string command loops over your parameters (such as @name and @weather) and if the first character is an @, then it uses check_plain on the value.

答案 2 :(得分:8)

如果要扩展变量,应该用双引号(")包装字符串:

$name = "Alica";
$string = "Hey, $name. How are you?"; // Hey, Alica. How are you?

See the documentation

答案 3 :(得分:1)

第三种解决方案,不比上述更好或更差,是串联:

echo 'Hello '. $name .'!!!';