2

我想{{{}}替换{}},因为,我需要用 来逃避那些{& 。如果我有输入,我希望我的脚本输出,看到了吗?但它不起作用看看我做了什么}{}{blah}{{}blah{}}

$output = str_replace(array("}", "{"), array("{}}", "{{}"), '{blah}');

但作为输出我得到了这个:{{}blah{{}}}而不是{{}blah{}}

4

2 回答 2

4

PHP 为您放入 $search 参数中的每个数组项迭代整个字符串。

它实际上是用你的第一个数组 item替换'{blah}'into ,然后从那个 into因为在第一次替换之后还有另一个。'{blah{}}''{''{{}blah{{}}}''{'

您最好使用正则表达式执行此操作,使用单个 RegExp 模式它只会在您的输入字符串中运行一次。

$str = preg_replace('/(\{|\})/', '{\\1}', '{blah}');
于 2012-12-07T06:41:45.240 回答
2

那是因为替换本身包含要搜索的字符串。我会改写它preg_replace_callback

echo preg_replace_callback('/{|}/', function($match) {
    return $match[0] == '{' ? '{{}' : '{}}';
}, '{bla}');

// {{}bla{}}
于 2012-12-07T06:41:38.593 回答