魔扣论坛

魔扣源码论坛业务
查看: 1689|回复: 5

如何使PHP文件与HTML代码更好的分离?

[复制链接]
  • TA的每日心情
    慵懒
    2018-10-28 00:07
  • 签到天数: 17 天

    [LV.4]神出鬼没

    15

    主题

    0

    回帖

    6

    积分

    魔扣新手

    Rank: 1

    魔扣币
    102
    贡献
    6
    威望
    0
    发表于 2016-12-31 15:42:33 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    大家都知道,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( &quot;$str = &quot;$str&quot;;&quot; );
    echo $str;
    ?>
    本例的传回值为
      这个 $string 中装有 $name.
    这个 杯子 中装有 咖啡.
      例子测试没有任何问题.可是,当我测试如下代码时,却出现了错误:
    <?
    $aa='my name is yyy!';
    $str='<input type=&quot;text&quot; name=&quot;textfield&quot; value=&quot;$aa&quot;>';
    eval( &quot;$str = &quot;$str&quot;;&quot; );
    echo $str;
    ?>
      百思不得其解后,求救,在网友提出的一系列解决方案中,终于以这种方式运行成功:
    <?
    $aa='my name is yyy!';
    $str='<input type=&quot;text&quot; name=&quot;textfield&quot; value=&quot;'$aa'&quot;>';
    eval( &quot;$str = &quot;$str&quot;;&quot; );
    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=&quot;text&quot; name=&quot;textfield&quot; value=&quot;$aa&quot;>');
      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( &quot;echo &quot;$str&quot;;&quot; );
    ?>
    再看看php中文手册,发现这么一句话:&quot;待处理的字串要符合 PHP 的字串格式&quot;,什么叫&quot;符合 PHP 的字串格式&quot;(有谁知道,麻烦告诉一声)?我不知道,也无从查找,只好看看字串处理函数.发现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( &quot;echo &quot;$str&quot;;&quot; );
    ?>
    可是在页面上显示是这样的:
      <input type=&quot;text&quot; name=&quot;textfield&quot; value=&quot;my name is yyy!&quot;>
      变量带入成功,可显示不符合要求.察看文件源码,内容如下:
      <input type=&quot;text&quot; name=&quot;textfield&quot; value=&quot;my &bsp name &bsp is yyy!&quot;>
      再看看手册的htmlspecialchars()的用法,发现此函数对字串作了如下操作:
      & (和) 转成 &
      &quot; (双引号) 转成 &quot;
      < (小于) 转成 <
      > (大于) 转成 >
      再查找,没发现与此函数作用相反的函数,于是,自己加了几行代码,再作如下调试,终于成功.
    <?php
    function dehtml($str){
    $str=str_replace('&quot;','&quot;',$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( &quot;echo dehtml(&quot;$str&quot;);&quot; );
    ?>
    在这个代码调试成功后,我又把一个内容复杂的html页面的源码加入一变量后插入到evaltest表中,

    再次测试,也成功了.
      有关eval函数用法里的&quot;待处理的字串要符合 PHP 的字串格式&quot;,我想是经过HTMLSpecialChars()函数处理过的字串吧,不知正确与否,有待方家斧正.

    该用户从未签到

    1

    主题

    273

    回帖

    547

    积分

    高级魔扣

    Rank: 4

    魔扣币
    273
    贡献
    273
    威望
    0
    发表于 2017-2-15 08:00:08 | 显示全部楼层
    大海因浪花而美丽,人生因友谊而充实,我把快乐的音符作为礼物送给你,愿爱你的人更爱你,你爱的人更懂你!魔扣源码论坛愿好友天天都有好心情,健康快乐幸福陪伴你!

    该用户从未签到

    3

    主题

    272

    回帖

    547

    积分

    高级魔扣

    Rank: 4

    魔扣币
    272
    贡献
    272
    威望
    0
    发表于 2017-5-20 08:32:41 来自手机 | 显示全部楼层
    风爱上了云。本来就是不可能的事。我爱上了你。是我宿命中的悲伤。没有咖啡的早晨,就跟没有你的人生是一样的。当我的生命里面懂得什么叫LOVE的时候。我才知道什么叫爱。魔扣源码论坛,你能为我加上ING吗?

    该用户从未签到

    0

    主题

    231

    回帖

    461

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    230
    贡献
    230
    威望
    0
    发表于 2017-9-30 18:49:27 | 显示全部楼层
    世界上有两个我,一个假装快乐,一个真心难过。',

    该用户从未签到

    1

    主题

    267

    回帖

    535

    积分

    高级魔扣

    Rank: 4

    魔扣币
    267
    贡献
    267
    威望
    0
    发表于 2018-3-14 08:56:33 | 显示全部楼层
    楼下的接上

    该用户从未签到

    1

    主题

    253

    回帖

    508

    积分

    高级魔扣

    Rank: 4

    魔扣币
    253
    贡献
    253
    威望
    1
    发表于 2018-9-19 12:40:37 来自手机 | 显示全部楼层
    ……
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 联系我们
    • 新浪微博 :
    • 在线客服 :魔扣科技 
    • 源码QQ群 :魔扣源码论坛官方总群
    • 联系邮箱 :charlin#morko.net
    • 微信扫一扫
    快速回复 返回顶部 返回列表