表现与业务逻辑分离
PHP和HTML混写,很乱啊,怎么解决?
一个页面分成两个文件即可,一个PHP做逻辑,一个HTML做模板。
比如“首页”index.php
分成:index.php
和index.html
。index.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
的代码,读一篇文章,却把所有文章取了出来,再取其中一篇,这样浪费性能啊,如果文章有成千上万篇,那怎么办?且听下回分解。