簡體   English   中英

如何將從數據庫中以純文本形式傳遞的 PHP 代碼字符串轉換為運行進程的實際代碼?

[英]How to convert string of PHP code which is passed as plain text from database, to actual code which run processes?

代碼從純文本區域保存到數據庫,並完全存儲為[php]echo $clientMenu;[/php]然后通過進程讀入文檔。 但是,該值要么呈現為純文本,要么不顯示,因為標簽正在轉換為注釋<?--;php $clientMenu? ?--> <?--;php $clientMenu? ?--> ,我懷疑后一個結果是由於WISECP的父應用程序使用 class simple_html_dom ( https://simplehtmldom.sourceforge.io/docs/1.9/index.html ) 的方法remove_noise() ) 來阻止output 為了安全起見,我還沒有想出一種方法來覆蓋它。

截屏

我嘗試使用eval()並且返回只是echo;

我的編碼處理字符串和 output 作為功能 PHP

private static function codeblock($codeblock)
{
    if( preg_match_all('#\[php\](.*?)\[\/php\]#is', $codeblock, $phpcode, PREG_SET_ORDER) ) {
        foreach($phpcode as $php) {
            $code = '<?php '.$php[1].' ?>';
            $codeblock = str_replace($php[0], $code, $codeblock);
        }
    }
    
    return $codeblock;
}

該值傳遞給 output 方法,在 HTML 文檔中渲染echo wcp::htmlRender()->head; $clientMenu的數據已經在呈現 HTML 的 PHP 文件中。

使流程正常運行的所有努力都失敗了,經過太多時間我已經無計可施了。 我當然會很感激任何幫助。


編輯

HTML 文檔中的評論結果的原因是由於 output 被寫入呈現為 HTML 的頁面中,這不是意圖。

我使用了eval() (是的,我知道它是邪惡的)並意識到正在評估 PHP 變量但返回的是空值。 所以很明顯不是與儲值相關聯。 eval()的替代方法是將編碼字符串解析為功能性 PHP

來自數據庫的字符串[php]$clientMenu[/php]

private static function codeblock($codeblock)
{
    if( preg_match_all('#\[php\](.*?)\[\/php\]#is', $codeblock, $phpcode, PREG_SET_ORDER) ) {
        foreach($phpcode as $php) {
            eval("\$da = \"$php[1]\";");

            $codeblock = str_replace($php[0], $da, $codeblock);
        }
    }
    
    return $codeblock;
}

html_entity_decode function 將幫助您轉換為實際代碼。 https://www.php.net/manual/en/function.html-entity-decode.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM