表现与业务逻辑分离

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

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

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

  1. <?php
  2. $articles = array();
  3. $file = './articles.json';
  4. if (file_exists($file)) {
  5. $tmp = file_get_contents($file);
  6. if (!empty($tmp)) {
  7. $articles = json_decode($tmp, true);
  8. }
  9. }
  10. $d = array(); //d 是 data的意思,后续会用到
  11. $d['articles'] = $articles;
  12. require_once __DIR__ . '/index.html';

index.html代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html
  3. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-Hans" lang="zh-Hans">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  8. <title>在线阅读</title>
  9. </head>
  10. <body>
  11. <h1>在线阅读</h1>
  12. <div><a href="./add_article.html">写文章</a></div>
  13. <?php
  14. if (!empty($d['articles'])) {
  15. echo '<ul>';
  16. foreach ($d['articles'] as $k=>$v) {
  17. $id = $k + 1;
  18. echo '<li><a href="./get_article.php?id=' . $id . '">' . $v['title'] . '</a>';
  19. echo '<p>' . mb_substr($v['content'], 0, 100, 'UTF-8') . '……</p></li>';
  20. }
  21. echo '</ul>';
  22. }
  23. ?>
  24. </body>
  25. </html>

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

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

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

截图如下:

notice ok

代码下载: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的代码,读一篇文章,却把所有文章取了出来,再取其中一篇,这样浪费性能啊,如果文章有成千上万篇,那怎么办?

    且听下回分解。