1

我有一个所见即所得的编辑器,我的客户想要使用类似的模式,比如 Wordpress 简码。

实际上,客户想要执行以下操作:

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

我可以使用 str_replace() 轻松替换 [/close_container],但是由于 class_name 会随着使用的每个简码而改变(比如是 [.green_block],我首先必须以某种方式捕获 green_block,然后将整个 [.green_block] 替换为<div class='green_block'>. 没有预定义的类列表,所以我对如何处理这个有点无能为力。

有任何想法吗?

4

3 回答 3

1

采用

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

沙洛姆...

于 2013-04-11T21:21:57.370 回答
1

这正是正则表达式最适合的:

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

显然上面不会有任何错误检查,因此很容易构造格式错误的 html。但是,通过一些额外的工作,您可以解决此问题并构建一些相当稳定的东西。

于 2013-04-11T21:24:11.973 回答
1

使用有限的允许输入集(如果不是特殊代码字符&#91;[ / &#93;],则使您的客户端需要将它们写在 HTML 实体中:

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

奇迹般有效。

于 2013-04-11T21:25:31.553 回答