我希望将{
替换为{{}
而将}
替换为{}}
,因为我需要转义那些{
& }
{}
{blah}
。
如果我输入{{}blah{}}
我希望我的脚本输出$output = str_replace(array("}", "{"), array("{}}", "{{}"), '{blah}');
,请参阅?
但它看不出我做了什么
{{}blah{{}}}
但是作为输出我得到了这个:{{}blah{}}
而不是{{1}}
答案 0 :(得分:4)
PHP迭代你在$ search参数中放入的每个数组项的整个字符串。
事实上,将'{blah}'
替换为您的第一个数组项'{blah{}}'
,然后从'{'
替换为'{{}blah{{}}}'
,因为之后还有另一个'{'
第一次更换。
最好使用正则表达式执行此操作,使用单个RegExp模式,它只会在输入字符串中运行一次。
$str = preg_replace('/(\{|\})/', '{\\1}', '{blah}');
答案 1 :(得分:2)
那是因为替换本身包含要搜索的字符串。我会用preg_replace_callback
改写它:
echo preg_replace_callback('/{|}/', function($match) {
return $match[0] == '{' ? '{{}' : '{}}';
}, '{bla}');
// {{}bla{}}