0

HTML と PHP を含む文字列があります。データベースから文字列を取得すると、画面に表示されますが、PHP コードは表示されません。文字列は次のようになります。

   $string = 'Hello <?php echo 'World';?>';
   echo $string;

出力

   Hello

ソースコード

   Hello <?php echo 'World';?>

ソースコードを見ると、そこに php 行があります。だから私がする必要があるのは、文字列にある php セグメントだけを eval() することです。

考慮すべきことの 1 つは、PHP はいつでも文字列内のどこにでも配置できるということです。

* 明確にするために、私の PHP 構成は正しいです。これは、一部の PHP がデータベースからダンプされ、レンダリングされない場合です。PHP コードを含む変数をエコーし​​ているため、実行に失敗します。*

私が受けるかもしれないどんな助けにも感謝します。

4

3 に答える 3

4
$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);

これは機能しますが、他の人が示唆するように、これはひどい考えです。アプリケーション アーキテクチャは、データベースにコードを格納することを中心に展開するべきではありません。

簡単に言えば、常に文字列を表示する必要があるページがある場合は、それらの文字列を生成するコードではなく、データベースに格納します。実際のデータはこれよりも複雑ですが、データベースで常に適切にモデル化する必要があります。

編集:ソース/補間を正しく削除するには、preg_replace_callback を使用して調整する必要があります。

于 2009-06-21T22:54:00.460 に答える
0

php コードを評価するのではなく、実行するだけです。php インタープリターをインストールし、apache+php を適切に構成する必要があります。次に、この .php ファイルは Hello World を出力するはずです。

編集への回答: preg_replace_callback を使用して php 部分を取得し、評価し、入力を出力に置き換えてから、エコーします。しかし。データベースからのものを評価する必要がある場合、それは設計エラーであるとほぼ確信しています。

于 2009-06-21T22:39:42.953 に答える
0

コードが適切な PHP であり、セミコロンで終わる限り、 eval() は正常に動作するはずです。最初に php タグを取り除いてから、評価してみてはどうでしょうか。

次の例はテスト済みで動作します。

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

基本的に、データベースにコンテンツを取得できる人なら誰でもコードを実行できるようにするため、データベースから取得したものが最初に適切にサニタイズされていることを確認してください。

于 2009-06-21T22:57:15.227 に答える