请教一个 str_replace 替换 花括号的问题

2022-05-19 08:49:25 +08:00
 tangknox1
<?php

$string = 高清贴图将《{$title}》 PC 版的画面;

$tit = 战车 2;

echo str_replace("{$title}", "$tit", $string);

?>

把 $string 中的内容里的 {$title} 替换为 $tit ,试了好几次,怎么也无法去掉完整的 {$title},怎么搞都是只能删除 {$title 后面只要加 } 就无法匹配出来。

小白求教,怎么搞才行。。
2393 次点击
所在节点    PHP
18 条回复
swordmaster
2022-05-19 08:55:23 +08:00
把双引号换成单引号
IceBay
2022-05-19 08:57:52 +08:00
用的双引号,被解析成变量值,换成单引号。
pota
2022-05-19 09:05:36 +08:00
echo str_replace("{{$title}}", "$tit", $string);
tangknox1
2022-05-19 09:06:35 +08:00
@IceBay 单引号也试了下,因为 {$title} 是 CMS 程序里模板引擎的数据调用标签,并且我试了下转义 比如 \{ 也不行。
tangknox1
2022-05-19 09:08:25 +08:00
@pota 这样也不行,前台打印后输出的是 《{$title}》
lizuoqiang
2022-05-19 09:11:53 +08:00
$string = '高清贴图将《{$title}》 PC 版的画面';

$tit = '战车 2';

echo str_replace('{$title}', $tit, $string);
IceBay
2022-05-19 09:12:27 +08:00
@tangknox1 #4 说说你想要的输出结果是什么?

>>> $string = '高清贴图将《{$title}》 PC 版的画面';
=> "高清贴图将《{$title}》 PC 版的画面"

>>> $tit = '战车 2';
=> "战车 2"

>>> str_replace('{$title}', '$tit', $string);
=> "高清贴图将《$tit 》 PC 版的画面"

>>> str_replace('{$title}', $tit, $string);
=> "高清贴图将《战车 2 》 PC 版的画面"
pota
2022-05-19 09:16:46 +08:00
绝了 没细看 你的$title 不是变量啊

echo str_replace("{\$title}", "$tit", $string) .PHP_EOL;
echo str_replace('{$title}', "$tit", $string) .PHP_EOL;

正常情况下都会输出
=> 高清贴图将《战车 2 》 PC 版的画面
tangknox1
2022-05-19 09:30:02 +08:00
@pota {$title} 是在文本内容里包含出现的,但是,同时这个 {$title} 又是 CMS 程序里模板引擎的一个标题调用标签,所以我要把他替换成别的。意思就是,必须把 {$title} 转换为文本类型然后用别的替换掉
tangknox1
2022-05-19 09:31:45 +08:00
@IceBay 哥,你们单独一个 PHP 文件里测试,肯定没问题,但是 {$title} 虽然是输出的文本内容,可 {$title} 同时也是我这套程序的模板引擎里的一个标题调用标签 {$title} 可以直接输出当前文章的标题。所以必须把这个{$title} 转为文本,然后用别的替换掉。
gesse
2022-05-19 09:34:44 +08:00
tangknox1
2022-05-19 09:39:58 +08:00
@gesse $string 中的文本里出现的 {$title} 同时也是我程序里模板引擎的一个数据标签,所以,我在模板里替换{$title},程序会把它当作数据调用标签,只能想法删除掉他并改成别的 '{$title}' 是不行的,'{$title', 只能这样,去掉后面那个 } ,才行。
tangknox1
2022-05-19 09:45:32 +08:00
感谢各位,,我用 echo $str = preg_replace("/\{[^\}]+\}/", "$tit", $string); 正则过滤了 花括号和里面内容,这样搞定了
gesse
2022-05-19 09:51:03 +08:00
兄弟你如果年龄大于等于 28 岁,我觉得你可以转下产品或者其他岗位。
gesse
2022-05-19 09:53:17 +08:00
真心的,我 10 年前开过培训学校,学生上千人, 现在保持联系的也很多。

从一些细枝末节我能知道一个人适不适合干程序。
tangknox1
2022-05-19 10:04:27 +08:00
@gesse 嘿嘿兄弟,我就没学过 PHP ,帖子里我也说了,小白一个,偶尔需要修改下程序里的代码,都是直接百度搜下案例,照着弄,也没看过什么 PHP 手册啥的。所以问的问题挺小白的。
zpfhbyx
2022-05-19 11:06:57 +08:00
试试 strtr?
fuchish112
2022-05-20 13:35:18 +08:00
<?php
/**
* 用上下文信息替换记录信息中的占位符
*/
function interpolate($message, array $context = array())
{
// 构建一个花括号包含的键名的替换数组
$replace = array();
foreach ($context as $key => $val) {
// 检查该值是否可以转换为字符串
if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) {
$replace['{' . $key . '}'] = $val;
}
}

// 替换记录信息中的占位符,最后返回修改后的记录信息。
return strtr($message, $replace);
}

// 含有带花括号占位符的记录信息。
$message = "User {username} created";

// 带有替换信息的上下文数组,键名为占位符名称,键值为替换值。
$context = array('username' => 'bolivar');

// 输出 "User bolivar created"
echo interpolate($message, $context);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX