2012-12-07 96 views
2

我想{{}}通過{}}更換{,因爲,我需要逃生者{ & }{}。 如果我已經輸入{blah}我希望我的腳本輸出{{}blah{}},請參閱? 但它不是我做了什麼海峽更換和邏輯

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

工作的期待,但作爲輸出我得到這個:{{}blah{{}}},而不是{{}blah{}}

回答

4

PHP迭代爲你把$搜索參數每個數組項目整個字符串。

事實上,這是你的第一個數組項'{'更換'{blah}''{blah{}}',然後從進'{{}blah{{}}}'因爲有另一個'{'第一置換後。

您最好使用正則表達式來執行此操作,使用單個RegExp模式,它將只在您的輸入字符串中運行一次。

$str = preg_replace('/(\{|\})/', '{\\1}', '{blah}'); 
+0

+1。我的回答不錯的優化:) –

+0

非常感謝你們! –

2

這是因爲更換本身包含到搜索的字符串。我會preg_replace_callback,而不是把它改寫:

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

// {{}bla{}}