2013-04-11 90 views
1

我有一個所見即所得的編輯器,我的客戶想要使用類似於Wordpress短碼的模式。用原來的字符串替換字符串

有效客戶想要做這樣的事情:

[.class_name] 
     /// Some content here 
[/close_container] 

我能夠輕鬆地更換[/ close_container]使用str_replace()函數,但CLASS_NAME將使用(每個簡碼改說這是[ .green_block]我第一次在某種程度上能夠捕獲green_block,然後整個[.green_block]與<div class='green_block'>進行更換。有類沒有預定義的列表,所以我有點無能如何處理這個。

任何想法?

+0

即使'strpos '可以幫助你找到它,'substr_replace'來代替 – zerkms 2013-04-11 21:13:58

+0

如果沒有預定義類的列表,你爲什麼不讓輸入'

...
'並完成? – 2013-04-11 21:15:38

+0

@ M8R-1jmw5r - I tri盡我所能來推動這一點,但客戶不願寫任何HTML代碼。相信我我試過了:/ – mauzilla 2013-04-11 21:16:54

回答

1

這正是正則表達式將是完美的:

$string = preg_replace('/\[\.(\w+)\]/i', '<div class="$1">', $string); 
$string = str_replace('[/close_container]', '</div>', $string); 

顯然上面不會有任何錯誤檢查,所以可以很容易地構建畸形HTML。然而,通過一些額外的工作,你可以解決這個問題並且構建一些非常穩定的東西

1

使用

$formated_string= preg_replace("/\[\.(\w\-\s)\]/", "$1", $entire_string); 

沙洛姆...

1

隨着有限的允許輸入的(並且使你的客戶需要把它們寫在HTML實體如果不是意味着作爲特殊代碼字符&#91; [/&#93; ]:

strtr($string, array(
    '[/close_container]' => '</div>', 
    '[.' => '<div class="', 
    ']' => '">' 
)); 

Works like a charm.