2009-06-21 9 views
0

私は文字列にHTML & PHPを含んでいます。データベースから文字列を取り出すと、それは画面に表示されますが、PHPコードは表示されません。文字列は次のようになります。文字列の一部をeval()する方法

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

出力

Hello 

ソースコード

Hello <?php echo 'World';?> 

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

PHPはいつでも文字列のどこにでも置くことができます。

*私のPHP設定は正しいですが、これはPHPのコードを変数にエコーしているため、データベースからダンプされてレンダリングされないPHPの設定です走る*

お手数をおかけしますが、どうもありがとうございます。

+0

出力ソースにphp行が表示されますか? – erenon

+0

はい、私が言及したように、PHPはソースにあります。 – Tisch

+0

私はコードを少しクリアして問題を少し詳しく説明しようとしました... – Tisch

答えて

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

$matches = array(); 

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

eval($matches[1]); 

これは機能しますが、他の人が持っているように、これはひどい考えです。アプリケーションアーキテクチャは、コードをデータベースに格納することを決して避けてください。

ほとんどの場合、文字列を常に表示する必要があるページがある場合は、それらの文字列をデータベースに格納します。コードを生成するのではなく、データベースに格納します。実世界のデータはこれよりも複雑ですが、常にデータベースで適切にモデル化されなければなりません。

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

+0

Thatsは治療を受けました。ありがとうございました。私は、このアドバイスに基づいて自分のプロジェクトをどのように構築するのかを再評価すると思います。 – Tisch

+0

お寄せいただきありがとうございます。 erenonの提案のようなものは良いと思う。エンティティを表示するなどのように、ブロック内に動的な機能を追加したい場合は、マーカー/ bbcodeをhtmlに置き、文字列/正規表現置換関数を使用して置き換えてください –

0

PHPコードを評価せず、実行するだけです。 PHPインタープリタをインストールし、apache + phpを適切に設定する必要があります。そして、この.phpファイルはHello Worldを出力するはずです。編集に

回答: 使用preg_replace_callbackが、それをevalし、PHPの一部を取得し、出力への入力を置き換えるために、それをエコー。 しかし、あなたがデータベースから来ていることを評価する必要があるなら、私はほとんど確信しています、それは設計上の誤りです。

+0

ありがとう、これはそうではありません。phpの行が文字列に入っています...そして、私は文字列が格納されている変数を持っています。変数をスクリーンにエコーすると、生のPHPコードもエコーされます。 – Tisch

+0

2番目の回答への応答:ありがとう、私はこれを行っていきます。あなたはおそらく設計の誤りについて書いているでしょう!それは私の個人的なプロジェクトなので、自分のデザインは...おそらく間違っています!しかし、あなたは住んでいると学ぶ:) – Tisch

+0

PHPのソースファイル、およびデータベースの内容のコードを保存します。たとえば、 bbcodeタグをデータベースに格納されたコンテンツに埋め込んで解析しますが、PHPコードとコンテンツを混在させることはあまりお勧めできません。エラーが発生しやすく、セキュリティ上の問題が発生し、パフォーマンスが悪く、保守が難しいなどの問題があります。コードとコンテンツを分けてください。具体的な問題については、もっと私が助けることができます。 – erenon

0

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

次の例は、テストされ、機能しました:

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

ちょうどあなたが、基本的にDBにコンテンツを取得することができます誰でもできるようにしているので、何でもあなたがDBから取得が正しく、最初にサニタイズされていることを確認して、コードを実行する。

関連する問題