2

{by{{}}byを置き換えたいのは、それらの&を{}}エスケープする必要があるためです。入力としてスクリプトを出力したい場合は、参照してください。しかし、それは私がしたことを見て働いていません{}{}{blah}{{}blah{}}

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

しかし、出力として私はこれを得ました:{{}blah{{}}}代わりに{{}blah{}}

4

2 に答える 2

4

PHPは、$searchパラメーターに入力した各配列項目の文字列全体を反復処理します。

実際には、最初の配列アイテムでに置き換え'{blah}'られ、最初の置き換えの後に別のアイテムがあるため、そこからに置き換えられます。'{blah{}}''{''{{}blah{{}}}''{'

正規表現を使用してこれを行う方がよいでしょう。単一のRegExpパターンを使用すると、入力文字列で1回だけ実行されます。

$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 に答える