2011-08-28 52 views
0

我一直在寻找一段时间,并没有能够拿出任何东西。我有一个包含html和php的页面。PHP dom替换

<div>%%replace_me%%</div> 


<? replaceStr("replace_me", "foobar"); ?> 

我需要将改变上述%%串入foobar的功能,使HTML看起来像这样:

<div>foobar</div> 

文本将始终被百分号但并不总是包围封闭在一个div中。页面上会出现php以及%% vars,因此将页面存储在$ var和str替换中并不适用于我。

+0

我不知道你在问什么。 – mtahmed

+1

你不能只使用'<?php echo“foobar”; ?>'代替'%% replace_me %%'? – evan

+1

@mtahmed“我需要一个函数,将上面的%%字符串变成foobar,使html看起来像这样” – Miles

回答

1

这听起来像你正在寻找模板引擎。 Smarty是PHP的流行之一。还有others

要明白,在服务器端代码(PHP)的上下文中,从你所暗示的意义上说,没有“DOM”,甚至没有真正的“HTML”。 .php文件中有HTML,但你不能像这样真正地进行交互。在PHP引擎解释PHP代码之后,文件中的文本正等待提供给客户端。

DOM解析和所有这些东西发生在浏览器中,一旦内容传递给客户端,即服务器端代码运行之后。也有PHP DOM parsers,但它们用于在PHP代码中使用HTML并对其进行操作,而不是用于在同一.php文件中与PHP代码之外的HTML标记进行交互。

1

您必须在页面开头附近添加ob_start(),以确保输出缓冲并在您有机会解析之前不会发送给用户。然后,我会尝试收集所有呼叫replaceStr(),直到所有可能的%%标记都已输出,并且您准备好一次性更换它们。然后,这应该做的伎俩:

function replace_str(&$body, $tag, $replace) { 
    str_replace('%%'.$tag.'%%', $replace, $body); 
} 
$body = ob_get_clean(); 
replaceStr($body, 'replace_me', 'foobar'); 
// other calls to replaceStr... 
echo $body 
ob_end_flush(); 
+0

+1这工作得很好,谢谢你的帮助Michael Mior – Miles

+0

没问题。乐意效劳。尽管如果你正在寻找更强大的东西,我仍然会看戴维的答案。 –