这是我的场景:在用PHP开发的自定义CMS中,我需要解析HTML字符串搜索一些自定义标记,以用一些HTML代码替换它们。这是一个澄清的例子:
<h2>Some Title</h2>
<p>Some text</p>
[[prod_id=123]] [[prod_id=165]] // custom tag
<p>More text</p>
我需要找到自定义标记并将其替换为项目的模板,因此:
<h2>Some Title</h2>
<p>Some text</p>
<!--Start Product123-->
<p>Title Product 123</p>
<!--End Product123-->
<!--Start Product165-->
<p>Title Product 165</p>
<!--End Product165-->
<p>More text</p>
这将非常有用,但我还需要做其他事情,我需要检测标签块并在标签之前添加一些代码,但每个标签块只需要一次。在此示例中,所需的最终代码类似于:
<h2>Some Title</h2>
<p>Some text</p>
<div><!-- Here the start of the block -->
<!--Start Product123-->
<p>Title Product 123</p>
<!--End Product123-->
<!--Start Product165-->
<p>Title Product 165</p>
<!--End Product165-->
</div><!-- Here the end of the block -->
<p>More text</p>
对我来说,完美的解决方案是将原始HTML代码作为参数,并返回最终的html代码。任何帮助表示赞赏。
答案 0 :(得分:2)
我建议你使用Regex和HTML,这可能会导致很多问题。而是做一些事情,比如你存储文章的文本/内容,然后只处理它。
但为了完整起见,你可以使用这样的东西:
$html = preg_replace_callback("/\[\[prod_id=(\d+)\]\]/",
function($matches)
{
$prod_id = $matches[1];
return '<p>Title Product ' . $prod_id . '</p>';
},
$html); // where $html is the html you want to process
如果你没有&#34;有&#34; HTML,然后您可以使用ob_start()
和ob_get_clean()
。
ob_start();
?>
<h2>Some Title</h2>
<p>Some text</p>
[[prod_id=123]] [[prod_id=165]] // custom tag
<p>More text</p>
<?php
$html = ob_get_clean();
// do the regex_replace_callback here
我还没有对此进行测试,只是在我的脑海中做到了。所以可能会有一些拼写错误!