• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

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

        如何使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


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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 一二三四免费观看在线视频中文版| 成年女人男人免费视频播放| 国内精品免费久久影院| 99免费观看视频| 又爽又黄无遮挡高清免费视频| 曰韩亚洲av人人夜夜澡人人爽 | 色费女人18女人毛片免费视频| 你懂的免费在线观看| 国产亚洲情侣一区二区无码AV| 色婷五月综激情亚洲综合| 好吊色永久免费视频大全| 无码少妇精品一区二区免费动态| 国产精品va无码免费麻豆| 久久久亚洲欧洲日产国码aⅴ| 国内成人精品亚洲日本语音| 国内精品免费麻豆网站91麻豆| 国产亚洲美日韩AV中文字幕无码成人 | 91香蕉视频免费| 亚洲影院天堂中文av色| 亚洲成人免费在线| 亚洲经典在线观看| 亚欧免费一级毛片| 国产精品亚洲自在线播放页码| 全免费A级毛片免费看网站| 国内精品99亚洲免费高清| 大地资源网高清在线观看免费 | 亚洲免费无码在线| 狼人大香伊蕉国产WWW亚洲 | 一级毛片在线免费观看| 亚洲成a人片在线观看播放| 国产成人AV片无码免费| 亚洲综合无码精品一区二区三区| 国产婷婷成人久久Av免费高清 | 亚洲中字慕日产2021| 久久精品国产亚洲av麻豆| 亚洲风情亚Aⅴ在线发布| 大地资源中文在线观看免费版| 亚洲综合久久久久久中文字幕| 亚洲免费网站观看视频| 性生大片视频免费观看一级| 国产精品四虎在线观看免费|