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

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:用PHP程序實現隨機廣告圖片顯示
      以下為引用的內容: <?php #########隨機廣告顯示########## function myads(){ $dir="ads"; #設置存放記錄的目錄 //$dir="

      大家都知道,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;
      ?>


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

      以下為引用的內容:

      <?
      $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='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 的字串格式”(有誰知道,麻煩告訴一聲)。我不知道,也無從查找,只好看看字串處理函數。發現htmlspecialchars()好像可用,于是試了一把:

      以下為引用的內容:

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

      可是在頁面上顯示是這樣的:

      以下為引用的內容:

      <input type="text" name="textfield" value="my name is 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 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\");" );
      ?>

      在這個代碼調試成功后,我又把一個內容復雜的html頁面的源碼加入一變量后插入到evaltest表中,再次測試,也成功了。

      有關eval函數用法里的"待處理的字串要符合 PHP 的字串格式",我想是經過HTMLSpecialChars()函數處理過的字串吧,不知正確與否,有待方家斧正。

      以上方法敬請各位網友測試,如果發現有什么錯誤或者有比這更好的解決方法,請告我一聲。

      分享:用PHP實現網頁開發中的翻頁跳轉
      我們都知道用 php mysql 在 web 頁實現數據庫資料全部顯示是非常簡單而有趣的,數據庫資料很少的情況下頁面顯示還是讓人滿意的,但是當數據庫資料非常多的情況下,頁面的顯示情況將會變的非常糟

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程