機能
php ファイルと html コードを適切に分離する方法
ビルド時に使用するWeb サイトの場合、コードはすぐに巨大になり制御不能になります。PHP コードを HTML
から分離し、ページを簡単にするために dw のような lib (テンプレート) を作成するにはどうすればよいでしょうか。
その後、たくさんの記事を読んで、phplib でそれが実現できると言いましたが、数ページ読んだ後、めまいを感じて、突然それ以上読む意欲を失いました。このような経験がありますので、お気軽に教えてください。よろしくお願いします!) しかし、問題はまだ解決する必要があります。
何日も落ち込んでいた後、偶然、vbb フォーラムのソース コードをダウンロードすることができました。ざっと見てみると、php
ファイルを除いて、これは私が望むスタイルではないかと思いました。唯一の
の利点は、HTML コードをデータベースに配置し、php ファイルを介して呼び出し、一連の処理の後、eval 関数
を使用して目的の値を変更することがわかったことです。変数は動的ページに取り込まれます。このようにして、vbb ソース コードを見るのではなく、eval 関数に切り替えます。
Starry Sky の放蕩息子の PHP 中国語マニュアルでは、次のように eval 関数が紹介されています。
関数: eval ()
その他の関数ライブラリ
eval
文字列に値を入れる
構文: void eval(string code_str);
戻り値: なし
関数の種類: データ処理
内容説明
これこの関数は文字列内の変数値を置き換えることができ、通常はデータベースのデータを処理するために使用されます。パラメータ code_str は処理される文字列が PHP の文字列形式に準拠している必要があることに注意してください。 、最後にセミコロンが必要です
この関数によって処理される文字列は、PHP プログラムの最後まで続きます
使用例
$string = 'cup';
$name =。 'コーヒー';
$str = 'この $string には $name が含まれています。
';
echo $str;
eval( "$str = "$str";" );
echo $str;
?> ;
この例の戻り値は
This $string contains $name.
This cup contains Coffee.
サンプルのテストでは問題ありませんが、次のコードをテストするとエラーが発生しました。
$aa='私の名前はyyyです!';
$str='';
eval ( "$str = "$str";" );
echo $str;
?>
長い間困惑した後、chainasp に助けを求めました。ネット民
が提案した一連の解決策の中で、最終的にこの解決策を見つけました。メソッドは正常に実行されます:
$aa='私の名前は yyy!';
$str='' ;
eval( "$str = "$str";" );
echo $str;
?>
しかし、$str を次のテーブルに挿入して抽出すると、別のエラーが発生します。迷惑な
Dead.
Database evaltest
# テーブル構造 'envtest'
CREATE TABLE envtest (
id tinyint(4) NOT NULL auto_increment,
sour mediatext,
PRIMARY KEY (id),
UNIQUE id (id),
KEY id_2 (id)
);
#テーブルコンテンツ 'envtest'
INSERT INTO envtest VALUES( '1', '') ;
phpファイルは次のとおりです:
$aa='私の名前はyyyです!';
$conn=mysql_connect('localhost','root','');
$sele='select sour envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=$arra['sour'];
eval( "echo " $str ";" );
?>
Xingkong Langzi の PHP 中国語マニュアルをもう一度見てみると、「処理される文字列は PHP の文字列形式に準拠している必要があります。」という文がありました。 PHPの文字列形式は「どういう意味ですか?」(知っている人、教えてください)? わからないし、見つからないので、文字列処理関数を見なければなりません。
htmlspecialchars() らしいことがわかりました。利用できるようになったので、試してみました:
$aa=' 私の名前は yyy です!';
$conn=mysql_connect('localhost','root','');
$sele=' envtest からサワーを選択します (id=1';
$res=mysql_db_query('evaltest', $sele);
$arra=mysql_fetch_array($res);
$str=htmlspecialchars($arra['sour']);
eval( "echo "$str";" );
?>
しかし、ページ上では上記の表示は次のようになります:
変数は正常にインポートされましたが、要件を満たしていないことが示されています。ファイルのソース コードを確認してください。内容は次のとおりです:
マニュアルの htmlspecialchars() の使用法を見ると、この関数は文字列に対して次の操作を実行することがわかりました。
& (and) は & に変換されます
" (二重引用符) は "
< (より小さい) に変換されます。は < > (より大きい) に変換されます> 再度検索しましたが、逆の効果を持つ関数が見つからなかったので、次のようにコードを追加してデバッグしました。最終的には
関数 dehtml($ str){
$str=str_replace('"','"',$str);
$str=str_replace('<','<',$str);
$str= str_replace('> ','>',$str);
$str=str_replace('&','&',$str);
return $str;
}
$aa='私の名前は yyy です!';
$ conn=mysql_connect('localhost','root','');
$sele='id=1 の envtest からサワーを選択';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array ($res);
$str=HTMLSpecialChars($arra['sour']);
eval( "echo dehtml("$str");" );
?>
これを正常にデバッグした後コードで、複雑なHTMLページのソースコードを変数に追加し、それをevaltestテーブルに挿入しました。 eval関数の使い方ですが、
HTMLSpecialChars()関数で処理された文字列だと思いますので、正しいかどうかは分かりません
で修正してください。上記の方法をテストしてください。エラーが見つかった場合、またはこれよりも優れた解決策がある場合は、私のメールアドレス: chensiping@263.net
を訴えてください。