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

Ali*_*del 14 php

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

$string = 'Hey, $name. How are you?'; 
Run Code Online (Sandbox Code Playgroud)

当我发布这个字符串时,$name不会改变.我怎么能这样做,所以我可以把+name+它改成名字.我已经尝试过搜索但我不知道该搜索什么,所以我没有运气.它可能很简单,但我只是在消隐.谢谢

Bra*_*tie 20

你可以使用占位符和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);
Run Code Online (Sandbox Code Playgroud)

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


Nic*_*ick 12

我一直都是粉丝strtr.

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

另一个优点是您可以定义不同的占位符前缀类型.Drupal就是这样做的; @表示要转义为可安全输出到网页的字符串(以避免注入攻击).所述FORMAT_STRING在你的参数指令环(如@name@weather),并且如果所述第一字符是一个@,那么它使用check_plain上的值.

  • 这是一个很好的答案,因为它还避免了 str_replace 遇到的一些陷阱:http://php.net/manual/en/function.strtr.php#117169 (2认同)

Tim*_*per 8

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

$name = "Alica";
$string = "Hey, $name. How are you?"; // Hey, Alica. How are you?
Run Code Online (Sandbox Code Playgroud)

请参阅文档.