2013-04-11 81 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.