我工作的一個內容管理器BB代碼的系統上,我希望能夠在我的textarea使用類似[code=php]<?php echo "Hello World!"; ?>[/code]
。使用GeSHi(語法高亮)我已經做了以下功能來解析代碼:PHP代碼不執行
function parsecode($codetype) {
$source = file_get_contents("file.php");
$language = $codetype;
$geshi = new GeSHi($source, $language);
echo '<code class="num">', implode(range(1,count(file("file.php"))), "<br />"), "</code>";
echo $geshi->parse_code();
}
這工作得很好!
現在,這是在那裏對BB代碼來自於使用了preg_replace我做了一個簡單的系統,查找和替換的碼位:
$find = array(
"/\[code\=(.+?)\](.+?)\[\/code\]/is"
);
$replace = array(
'<?php parsecode("$1"); ?>'
);
是的,現在這意味着它只能讀取語言和解析文件「file.php」,但最終我會有這個工作不同,但現在並不重要。
會發生什麼,是BB代碼得到正確執行,結果是它確實執行代碼,但它不執行函數parsecode()
。我做了一個小調整,找出問題所在,並將其保存到一個文件中,結果發現該文件包含以下內容:<?php parsecode("php"); ?>
。這正是它應該包含的內容。當我在文件中寫入這行代碼時,它會執行。在textarea的提交
凡是被存儲在一個文件中,然後使用fopen()
讀取,然後在不同的頁面中回顯。
我的問題:爲什麼不函數執行&解析像它應該的代碼?
謝謝!
很抱歉這麼晚纔回復,我去後睡覺一小時。所以基本上這是做到這一點的唯一方法。在我的情況下,我有一個穩固的登錄系統,但當然總是有辦法解決這個問題,所以這確實是不鼓勵的。那麼我的問題仍然存在,我怎麼能做到這一點呢?我怎麼能做出一個BB代碼結構,允許你輸入'[code = php] <?php echo「Hello World!」; ?> [/ code]'並且使用原始文章中的代碼進行渲染?我相信這是可能的,但我不知道如何..謝謝你的回覆:) – BananaMan
這裏的另一個解決方案: 爲什麼不做語法高亮客戶端? 有一個庫,例如highlight.js可以做到這一點: 的http:// highlightjs。org/ 然後,您可以簡單地使用javascript來完成客戶端的所有分析或準備處理腳本中的HTML,並簡單地運行HTML,因爲它來自數據庫。 – Ruby
我確實越過了highlightjs.org幾次,但我不知道如何將其構建成一個功能性的BB代碼:/ – BananaMan