表现与业务逻辑分离

PHP和HTML混写,很乱啊,怎么解决?

一个页面分成两个文件即可,一个PHP做逻辑,一个HTML做模板。

比如“首页”index.php分成:index.phpindex.htmlindex.php代码如下:

<?php
$articles = array();
$file = './articles.json';
if (file_exists($file)) {
    $tmp = file_get_contents($file);
    if (!empty($tmp)) {
        $articles = json_decode($tmp, true);
    }
}

$d = array(); //d 是 data的意思,后续会用到
$d['articles'] = $articles;
require_once __DIR__ . '/index.html';

index.html代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-Hans" lang="zh-Hans">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>在线阅读</title>
    </head>
    <body>
        <h1>在线阅读</h1>
        <div><a href="./add_article.html">写文章</a></div>
        <?php
            if (!empty($d['articles'])) {
                echo '<ul>';
                foreach ($d['articles'] as $k=>$v) {
                    $id = $k + 1;
                    echo '<li><a href="./get_article.php?id=' . $id . '">' . $v['title'] . '</a>';
                    echo '<p>' . mb_substr($v['content'], 0, 100, 'UTF-8') . '……</p></li>';
                }
                echo '</ul>';
            }
        ?>
    </body>
</html>

保存之后,在Firefox中页面怎么乱码了?

打开add_article_submit.php的源代码看一下,只输出了“保存成功”,那这不是一个网页。一个正常的网页需要包含DOCTYPE html、head、body等内容,其中head里的charset声明了编码,这样浏览器才能正常显示。所以添加一个notice.html模板即可。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-Hans" lang="zh-Hans">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>提示:<?=$d['notice']['msg']?></title>
    </head>
    <body>
        <h1>提示:<?=$d['notice']['msg']?></h1>
        <p><a href="/">回到首页</a></p>
    </body>
</html>

截图如下:

代码下载:https://github.com/sinkcup/php-ebook-online-reader/tree/0.3.0

总结一下

我的技术水平

HTML

PHP

数据存储

HTTP协议

程序员的自我修养

装备

等级

语义化

让内容动起来

单机文件

GET、POST

PC + Windows

0.2

表现与业务分离

charset

Unicode

0.3

已解决的问题

  • PHP和HTML混写,很乱啊,怎么解决?

    把HTML单独保存,PHP中require即可,这样就实现了表现与业务逻辑分离。

  • 保存之后,在Firefox中页面怎么乱码了?

    HTML中需要声明charset,浏览器才知道用什么编码解析。

  • ANSI与ASCII的区别,UTF-8与Unicode的区别,GB2312、CP936、GBK、GB18030的区别,为什么技术公司的程序(Android、iOS、Linux、OS X、Windows)都使用Unicode?

    请自行学习。

  • 【百万年薪的人都是怎么过日子的?】

    匿名用户:感谢大家的关注。很多朋友对选对行业……http://zhi.hu/3Rv9(分享自知乎)

待解决的问题

  • 查看get_article.php的代码,读一篇文章,却把所有文章取了出来,再取其中一篇,这样浪费性能啊,如果文章有成千上万篇,那怎么办?

    且听下回分解。

Last updated