ホームページ  >  記事  >  php教程  >  PHP ファイルを HTML コードから適切に分離する方法

PHP ファイルを HTML コードから適切に分離する方法

WBOY
WBOYオリジナル
2016-06-21 08:58:011654ブラウズ

ご存知のとおり、php はサーバーサイドに埋め込まれた HTML スタイルのスクリプト プログラミング言語です。ただし、埋め込み HTML を使用して Web サイトを構築すると、コードはすぐに巨大になり制御不能になります。 php コードを html から分離し、dw のような lib (テンプレート) を作成して、ページの変更とコードの保守を容易にするにはどうすればよいでしょうか?

その後、phplib でそれが実現できるという記事をたくさん読みましたが、数ページ読んでめまいを感じて、急にそれ以上読む気が失せました。しかし、問題はまだ解決する必要があります。偶然、vbb フォーラムのソースコードをダウンロードできました。ざっと調べたところ、php ファイル以外には html コードがほとんどないことがわかりました。これは私が望むスタイルではないかと思いました。唯一の利点は、HTML コードをデータベースに配置し、一連の処理の後に eval 関数を使用してそれを呼び出すことです。生成された動的ページに必要な変数を取り込みます。このようにして、vbb のソース コードを見るのをやめて、eval 関数に切り替えました。 PHP の中国語マニュアルでは、次のように eval 関数が紹介されています。

関数: eval()

その他の関数ライブラリ

eval

文字列に値を代入するの間で。

構文: void eval(string code_str);

戻り値: なし

関数の種類: データ処理

内容の説明

この関数は文字列内の変数値を置き換えることができ、通常はデータベース データを処理するために使用されます。パラメータ code_str は、処理される文字列です。処理される文字列は PHP の文字列形式に準拠している必要があり、末尾にセミコロンが必要であることに注意してください。この関数を使用して処理された文字列は、PHP プログラムが終了するまで継続されます。

使用例

テーブル>

この例の戻り値は

以下は引用内容です:
以下为引用的内容:

$string = '杯子';
$name = '咖啡';
$str = '这个 $string 中装有 $name.
';
echo $str;
eval( "$str = "$str";" );
echo $str;
?>

$string = 'カップ';

$name = 'コーヒー';

$str = 'この $string には $name が含まれています。
'; echo $str;

eval( "$str = "$str";" );

echo $str;

?>

以下为引用的内容:

$aa='my name is yyy!';
$str='';
eval( "$str = "$str";" );
echo $str;
?>


この $string には $name が含まれています。

このカップにはコーヒーが入っています。

以下为引用的内容:

$aa='my name is yyy!';
$str='';
eval( "$str = "$str";" );
echo $str;
?>

例題テストは問題ありません。ただし、次のコードをテストすると、エラーが発生しました:

以下は引用内容です:

$aa='私の名前は yyy です!';

$str='';

eval( "$str = "$str";" );

以下为引用的内容:

CREATE TABLE envtest (
   id tinyint(4) NOT NULL auto_increment,
   sour mediumtext,
   PRIMARY KEY (id),
   UNIQUE id (id),
   KEY id_2 (id)
);

echo $str;?>
私は困惑した後、ネチズンが提案した一連の解決策の中で、最終的にこの方法で成功しました。 テーブル> しかし、次のテーブルに $str を挿入して抽出すると、また問題が発生しました。 データベース evaltest # テーブル構造 'envtest'
以下は引用内容です: $aa='私の名前は yyy です!';<🎜>$str=' ';eval( "$str = "$str";" );echo $str;?>
テーブル>

#表内容 'envtest'

以下は引用内容です: CREATE TABLE envtest ( id tinyint(4) NOT NULL auto_increment, sour mediatext, PRIMARY KEY (id), UNIQUE id (id), KEY id_2 (id ))
テーブル>

php文件如下:

以下は引用内容:
以下为引用的内容:

INSERT INTO envtest VALUES( '1', '');

INSERT INTO envtest VALUES( '1', '');
以下为引用的内容:

$aa='my name is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=$arra['sour'];
eval( "echo "$str";" );
?>

テーブル>

再看看php中文手册,発行莰这么一句话:“処理待ちの文字串要符合 PHP の文字列格式”,什么叫“符合 PHP の文字列格式”(有谁知道,麻烦告诉)一声)。点線; 表レイアウト: 固定; 境界線上部: #cccccc 点線; 境界線下部: #cccccc 点線; セルスペース = 0" セルパディング = 6" 幅 = 95% " align="center" border="0">

テーブル>

次のことが表に表示されます:

以下は引用内容:
$aa='私の名前は yyy です!';
$conn=mysql_connect('localhost','root','');
$sele=' envtest からサワーを選択します (id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=$arra[ '酸っぱい'];
eval( "echo "$str";" );
?>

以下は引用内容:
以下为引用的内容:

$aa='my name is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=htmlspecialchars($arra['sour']);
eval( "echo "$str";" );
?>

$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) は &
に変換されます" (double引用符) に変換されます。 "

に変換します。再度検索して、この関数と逆の効果を持つ関数を見つけません。 , そこで私は自分で追加しました。次のように数行のコードとデバッグを行った後、最終的に成功しました。

以下は引用内容:
テーブル>

このコードのデバッグに成功した後、複雑な HTML ページのソース コードを変数に追加し、それを evaltest テーブルに挿入しました。再度テストしたところ、成功しました。 eval関数の使い方の「処理する文字列はPHPの文字列形式に従う必要がある」についてですが、HTMLSpecialChars()関数で処理される文字列だと思います。それが正しいかどうかは、Fang Jia を待つ必要があります。 上記の方法をテストして、エラーやこれよりも良い解決策を見つけた場合は、お知らせください。
以下は引用内容です:
以下为引用的内容:
function dehtml($str){
$str=str_replace('"','"',$str);
$str=str_replace('<','<',$str);
$str=str_replace('>','>',$str);
   $str=str_replace('&','&',$str);        
return $str;
}  
$aa='my name  is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=HTMLSpecialChars($arra['sour']);
eval( "echo  dehtml("$str");" );
?>
function dehtml($str){

$str=str_replace('"','"',$str);

$str=str_replace('<','<',$str);

$str=str_replace('>','>',$str); $str=str_replace('&','&',$str); }

$aa='my名前は yyy です!';

$conn=mysql_connect('localhost','root','');

$sele='select sour from envtest where id=1 ';

$res=mysql_db_query ('evaltest',$sele);

$arra=mysql_fetch_array($res);
$str=HTMLSpecialChars($arra['sour']);
eval( "echo dehtml("$str ");" );

?>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。