日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

如何使php文件與html碼更好的分離--eval函數的用法

如何使php文件與html碼更好的分離--eval函數的用法

更新時間:2022-05-06 文章作者:未知 信息來源:網絡 閱讀次數:

如何使php文件與html碼更好的分離
 ------eval函數的用法
 
大家都知道,php是一種服務器端的內嵌html式的腳本編程語言.可是按照內嵌html
方式來作一網站的話,代碼很快就變得龐大而且不可控制.如何才能使php代碼與html
分離,做出類似dw的lib(模板)而使得頁面更加容易修改并且代碼容易維護呢?
后來,看了很多文章,說phplib可以實現,隨手看了幾頁,覺得頭暈腦漲,頓時沒有了看
下去的欲望(那位大蝦如果有此心得,敬請不吝賜教,先行謝過!).可是問題還得解決,在
郁悶了多日之后,一次偶然機會,得以下載vbb論壇的源碼,粗粗看過之后,發現除了php
文件外,很少看見html碼.心想這不就是我想要的樣式嗎,看吧.依然頭暈腦漲:(,唯一的
收獲是知道了它把html碼放在數據庫里,通過php文件調用,經過一系列處理后,用eval函數
將希望的變量帶入生成所需要的動態頁.這樣,我就沒再看vbb源碼,而轉入eval函數了.
星空浪子的php中文手冊是這樣介紹eval函數的:

函式:eval()

雜項函式庫

eval
將值代入字串之中。

語法: void eval(string code_str);

傳回值: 無

函式種類: 資料處理


內容說明

本函式可將字串之中的變數值代入,通常用在處理資料庫的資料上。參數 code_str
為欲處理的字串。值得注意的是待處理的字串要符合 PHP 的字串格式,同時在結尾
處要有分號。使用本函式處理后的字串會沿續到 PHP 程式結束。

使用范例

<?php
$string = '杯子';
$name = '咖啡';
$str = '這個 $string 中裝有 $name.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>

本例的傳回值為

這個 $string 中裝有 $name.
這個 杯子 中裝有 咖啡.


例子測試沒有任何問題.可是,當我測試如下代碼時,卻出現了錯誤:
<?
$aa='my name is yyy!';
$str='<input type="text" name="textfield" value="$aa">';
eval( "\$str = \"$str\";" );
echo $str;
?>
百思不得其解后,在chainasp上求救,在網友提出的一系列解決方案
中,終于以這種方式運行成功:
<?
$aa='my name is yyy!';
$str='<input type="text" name="textfield" value="\'$aa\'">';
eval( "\$str = \"$str\";" );
echo $str;
?>

可是,當我把$str 插入如下一個表中然后又提取出時,又出錯了,簡直惱火
死了.

數據庫 evaltest
# 表結構 'envtest'

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

#表內容 'envtest'
INSERT INTO envtest VALUES( '1', '<input type=\"text\" name=\"textfield\" value=\"$aa\">');

php文件如下:
<?
$aa='mynameis 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 的字串格式"(有誰知道,麻煩告訴一聲)?我不知道,也無從查找,只好看看字串處理函數.
發現htmlspecialchars()好像可用,于是試了一把:
<?
$aa='mynameis 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\";" );
?>
可是在頁面上顯示是這樣的:
<input type="text" name="textfield" value="mynameis yyy!">
變量帶入成功,可顯示不符合要求.察看文件源碼,內容如下:
<input type="text" name="textfield" value="my &bsp name &bsp is yyy!">
再看看手冊的htmlspecialchars()的用法,發現此函數對字串作了如下操作:
& (和) 轉成 &
" (雙引號) 轉成 "
< (小于) 轉成 <
> (大于) 轉成 >
再查找,沒發現與此函數作用相反的函數,于是,自己加了幾行代碼,再作如下調試,終于成功.
<?php
function dehtml($str){
 $str=str_replace('"','"',$str);
 $str=str_replace('<','<',$str);
 $str=str_replace('>','>',$str);
 $str=str_replace('&','&',$str); 
return $str;

$aa='my nameis 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( "echodehtml(\"$str\");" );
?>
在這個代碼調試成功后,我又把一個內容復雜的html頁面的源碼加入一變量后插入到evaltest表中,
再次測試,也成功了.
有關eval函數用法里的"待處理的字串要符合 PHP 的字串格式",我想是經過
HTMLSpecialChars()函數處理過的字串吧,不知正確與否,有待方家斧正.

以上方法敬請各位網友測試,如果發現有什么錯誤或者有比這更好的解決方法,請告我一聲,我的郵件
地址為:chensiping@263.net


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 日韩www视频 | 天天天狠天天透天天制色 | 成人夜视频寂寞在线观看 | 日本不卡一区在线 | 91视频这里只有精品 | 天天操天天射天天插 | 国产欧美日韩综合二区三区 | 日韩一级精品视频在线观看 | 久久久久四虎国产精品 | 乱人伦中文字幕 | 怡红院在线播放 | 青青青国产高清在线观看视频 | 啪啪99久久综合精品色 | 国产精品久久香蕉免费播放 | 毛片99 | 欧美伊人 | 亚洲欧美在线一区 | 国产高清视频免费在线观看 | 成人免费福利网站在线看 | 国产国产午夜精华免费 | 夜夜爱夜夜爽夜夜做夜夜欢 | 国产在线观看不卡 | 久久成人永久免费播放 | 伊人久久中文大香线蕉综合 | 免费在线视频日本 | 亚洲一二四区性毛片1在线 亚洲一级理论片 | 成人性一级视频在线观看 | 欧美精品九九99久久在观看 | 久久成人免费 | 不卡国产在线 | 欧美一级级a在线观看 | 天天插日日射 | 狠狠热视频 | 国产精品短视频免费观看 | 午夜在线观看视频免费 成人 | 成人国内精品久久久久影 | 国内精品久久久久久久星辰影视 | 波多野结衣在线一区 | 福利视频影院 | 2022四虎海外永久地址 | 日韩精品www |