如何使PHP文件與HTML代碼更好的分離_PHP教程
推薦:用PHP程序?qū)崿F(xiàn)隨機(jī)廣告圖片顯示以下為引用的內(nèi)容: <?php #########隨機(jī)廣告顯示########## function myads(){ $dir="ads"; #設(shè)置存放記錄的目錄 //$dir="
大家都知道,php是一種服務(wù)器端的內(nèi)嵌html式的腳本編程語(yǔ)言。可是按照內(nèi)嵌html方式來(lái)作一網(wǎng)站的話(huà),代碼很快就變得龐大而且不可控制。如何才能使php代碼與html分離,做出類(lèi)似dw的lib(模板)而使得頁(yè)面更加容易修改并且代碼容易維護(hù)呢?
后來(lái),看了很多文章,說(shuō)phplib可以實(shí)現(xiàn),隨手看了幾頁(yè),覺(jué)得頭暈?zāi)X漲,頓時(shí)沒(méi)有了看下去的欲望。可是問(wèn)題還得解決,在一次偶然機(jī)會(huì),得以下載vbb論壇的源碼,粗粗看過(guò)之后,發(fā)現(xiàn)除了php文件外,很少看見(jiàn)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ú)
函式種類(lèi): 資料處理
內(nèi)容說(shuō)明
本函式可將字串之中的變數(shù)值代入,通常用在處理資料庫(kù)的資料上。參數(shù) code_str為欲處理的字串。值得注意的是待處理的字串要符合 PHP 的字串格式,同時(shí)在結(jié)尾處要有分號(hào)。使用本函式處理后的字串會(huì)沿續(xù)到 PHP 程式結(jié)束。
使用范例
| 以下為引用的內(nèi)容: <?php |
本例的傳回值為
這個(gè) $string 中裝有 $name。
這個(gè) 杯子 中裝有 咖啡。
例子測(cè)試沒(méi)有任何問(wèn)題。可是,當(dāng)我測(cè)試如下代碼時(shí),卻出現(xiàn)了錯(cuò)誤:
| 以下為引用的內(nèi)容: <? |
百思不得其解后,求救,在網(wǎng)友提出的一系列解決方案中,終于以這種方式運(yùn)行成功:
| 以下為引用的內(nèi)容: <? |
可是,當(dāng)我把$str 插入如下一個(gè)表中然后又提取出時(shí),又出錯(cuò)了。
數(shù)據(jù)庫(kù) evaltest
# 表結(jié)構(gòu) 'envtest'
| 以下為引用的內(nèi)容: CREATE TABLE envtest ( |
#表內(nèi)容 'envtest'
| 以下為引用的內(nèi)容: INSERT INTO envtest VALUES( '1', '<input type=\"text\" name=\"textfield\" value=\"$aa\">'); |
php文件如下:
| 以下為引用的內(nèi)容: <? |
再看看php中文手冊(cè),發(fā)現(xiàn)這么一句話(huà):“待處理的字串要符合 PHP 的字串格式”,什么叫“符合 PHP 的字串格式”(有誰(shuí)知道,麻煩告訴一聲)。我不知道,也無(wú)從查找,只好看看字串處理函數(shù)。發(fā)現(xiàn)htmlspecialchars()好像可用,于是試了一把:
| 以下為引用的內(nèi)容: <? |
可是在頁(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)告我一聲。
分享:用PHP實(shí)現(xiàn)網(wǎng)頁(yè)開(kāi)發(fā)中的翻頁(yè)跳轉(zhuǎn)我們都知道用 php mysql 在 web 頁(yè)實(shí)現(xiàn)數(shù)據(jù)庫(kù)資料全部顯示是非常簡(jiǎn)單而有趣的,數(shù)據(jù)庫(kù)資料很少的情況下頁(yè)面顯示還是讓人滿(mǎn)意的,但是當(dāng)數(shù)據(jù)庫(kù)資料非常多的情況下,頁(yè)面的顯示情況將會(huì)變的非常糟
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪(fǎng)問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶(hù)端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP中header和session_start前不能有輸出的原因
- php判斷終端是手機(jī)還是電腦訪(fǎng)問(wèn)網(wǎng)站的思路及代碼
- 壞狼的php學(xué)習(xí)第2天
- PHP刪除數(shù)組中特定元素的兩種方法
- 怎樣通過(guò)PHP連接MYSQL數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建表
- PHP中圖片等比縮放的實(shí)例
- 淺析php實(shí)現(xiàn)大文件上傳源代碼
- PHP基礎(chǔ)學(xué)習(xí)之流程控制的實(shí)現(xiàn)分析
- PHP顯示當(dāng)前在線(xiàn)用戶(hù)
- LotusPhp筆記之:Logger組件的使用方法
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-如何使PHP文件與HTML代碼更好的分離
。