国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > PHP > 正文

如何使PHP文件與HTML代碼更好的分離

2024-05-04 23:05:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

大家都知道,php是一種服務(wù)器端的內(nèi)嵌html式的腳本編程語(yǔ)言。可是按照內(nèi)嵌html方式來(lái)作一網(wǎng)站的話,代碼很快就變得龐大而且不可控制。如何才能使php代碼與html分離,做出類似dw的lib(模板)而使得頁(yè)面更加容易修改并且代碼容易維護(hù)呢?

后來(lái),看了很多文章,說(shuō)phplib可以實(shí)現(xiàn),隨手看了幾頁(yè),覺得頭暈?zāi)X漲,頓時(shí)沒(méi)有了看下去的欲望。可是問(wèn)題還得解決,在一次偶然機(jī)會(huì),得以下載vbb論壇的源碼,粗粗看過(guò)之后,發(fā)現(xiàn)除了php文件外,很少看見html碼。心想這不就是我想要的樣式嗎,唯一的收獲是知道了它把html碼放在數(shù)據(jù)庫(kù)里,通過(guò)php文件調(diào)用,經(jīng)過(guò)一系列處理后,用eval函數(shù)將希望的變量帶入生成所需要的動(dòng)態(tài)頁(yè)。這樣,我就沒(méi)再看vbb源碼,而轉(zhuǎn)入eval函數(shù)了。php中文手冊(cè)是這樣介紹eval函數(shù)的:

函式:eval()

雜項(xiàng)函式庫(kù)

eval

將值代入字串之中。

語(yǔ)法: void eval(string code_str);

傳回值: 無(wú)

函式種類: 資料處理

內(nèi)容說(shuō)明

本函式可將字串之中的變數(shù)值代入,通常用在處理資料庫(kù)的資料上。參數(shù) code_str為欲處理的字串。值得注意的是待處理的字串要符合 php 的字串格式,同時(shí)在結(jié)尾處要有分號(hào)。使用本函式處理后的字串會(huì)沿續(xù)到 php 程式結(jié)束。

使用范例

以下為引用的內(nèi)容:

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

本例的傳回值為

這個(gè) $string 中裝有 $name。

這個(gè) 杯子 中裝有 咖啡。

例子測(cè)試沒(méi)有任何問(wèn)題。可是,當(dāng)我測(cè)試如下代碼時(shí),卻出現(xiàn)了錯(cuò)誤:

以下為引用的內(nèi)容:

<?
$aa='my name is yyy!';
$str='<input type="text" name="textfield" value="$aa">';
eval( "/$str = /"$str/";" );
echo $str;
?>


百思不得其解后,求救,在網(wǎng)友提出的一系列解決方案中,終于以這種方式運(yùn)行成功:

以下為引用的內(nèi)容:

<?
$aa='my name is yyy!';
$str='<input type="text" name="textfield" value="/'$aa/'">';
eval( "/$str = /"$str/";" );
echo $str;
?>

可是,當(dāng)我把$str 插入如下一個(gè)表中然后又提取出時(shí),又出錯(cuò)了。

數(shù)據(jù)庫(kù) evaltest

# 表結(jié)構(gòu) 'envtest'

以下為引用的內(nèi)容:

create table envtest (
   id tinyint(4) not null auto_increment,
   sour mediumtext,
   primary key (id),
   unique id (id),
   key id_2 (id)
);

#表內(nèi)容 'envtest'

以下為引用的內(nèi)容:

insert into envtest values( '1', '<input type=/"text/" name=/"textfield/" value=/"$aa/">');

php文件如下:

以下為引用的內(nèi)容:

<?
$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中文手冊(cè),發(fā)現(xiàn)這么一句話:“待處理的字串要符合 php 的字串格式”,什么叫“符合 php 的字串格式”(有誰(shuí)知道,麻煩告訴一聲)。我不知道,也無(wú)從查找,只好看看字串處理函數(shù)。發(fā)現(xiàn)htmlspecialchars()好像可用,于是試了一把:

以下為引用的內(nèi)容:

<?
$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/";" );
?>

可是在頁(yè)面上顯示是這樣的:

以下為引用的內(nèi)容:

<input type="text" name="textfield" value="my  name  is yyy!">

變量帶入成功,可顯示不符合要求.察看文件源碼,內(nèi)容如下:

以下為引用的內(nèi)容:

<input type="text" name="textfield" value="my &bsp name &bsp is yyy!">

再看看手冊(cè)的htmlspecialchars()的用法,發(fā)現(xiàn)此函數(shù)對(duì)字串作了如下操作:

& (和) 轉(zhuǎn)成 &
" (雙引號(hào)) 轉(zhuǎn)成 "
< (小于) 轉(zhuǎn)成 <
> (大于) 轉(zhuǎn)成 >

再查找,沒(méi)發(fā)現(xiàn)與此函數(shù)作用相反的函數(shù),于是,自己加了幾行代碼,再作如下調(diào)試,終于成功。

以下為引用的內(nèi)容:
<?php
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/");" );
?>

在這個(gè)代碼調(diào)試成功后,我又把一個(gè)內(nèi)容復(fù)雜的html頁(yè)面的源碼加入一變量后插入到evaltest表中,再次測(cè)試,也成功了。

有關(guān)eval函數(shù)用法里的"待處理的字串要符合 php 的字串格式",我想是經(jīng)過(guò)htmlspecialchars()函數(shù)處理過(guò)的字串吧,不知正確與否,有待方家斧正。

以上方法敬請(qǐng)各位網(wǎng)友測(cè)試,如果發(fā)現(xiàn)有什么錯(cuò)誤或者有比這更好的解決方法,請(qǐng)告我一聲。

菜鳥學(xué)堂:
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊宁市| 高清| 班玛县| 新建县| 库车县| 庄浪县| 务川| 铜山县| 扶绥县| 磐石市| 荥阳市| 宜宾县| 黄龙县| 平顺县| 兴隆县| 繁峙县| 称多县| 屏南县| 利辛县| 城步| 新晃| 苏尼特左旗| 内江市| 屯留县| 右玉县| 大港区| 忻州市| 北辰区| 双流县| 巫溪县| 将乐县| 太仆寺旗| 南康市| 汉沽区| 桃源县| 瑞昌市| 来宾市| 宜黄县| 福州市| 景东| 迭部县|