2011-08-28 94 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

沒問題。樂意效勞。儘管如果你正在尋找更強大的東西,我仍然會看戴維的答案。 –