自动把纯文本转换成Web页面的php代码


Posted in PHP onAugust 27, 2009

首先让我们来看一个我朋友希望转换的纯文本文件的例子:
以下为引用的内容:

Green for Mars! 

John R. Doe 

The idea of little green men from Mars, long a staple of science fiction, may soon turn out to be less fantasy and more fact. 

Recent samples sent by the latest Mars exploration team indicate a high presence of chlorophyll in the atmosphere. Chlorophyll, you will recall, is what makes plants green. It's quite likely, therefore, that organisms on Mars will have, through continued exposure to the green stuff, developed a greenish tinge on their outer exoskeleton. 

An interview with Dr. Rushel Bunter, the head of ASDA's Mars Colonization Project blah blah... 

What does this mean for you? Well, it means blah blahblah... 

Track follow-ups to this story online at http://www.mars-connect.dom/. To see pictures of the latest samples, log on to http://www.asdamcp.dom/galleries/220/

相当标准的文本:它有一个标题、一个署名和很多段的文字。把这篇文档转换成为HTML真正需要做的是使用HTML的分行和分段标记把原文的布局保留在Web页面上。特殊的标点符号需要被转换成为对应的HTML符号,超链接需要变得可以点击。
下面的PHP代码(列表A)就会完成上面所有的任务:
列表A
让我们来看看它是如何工作的:
<?php 
// set source file name and path 
$source = "toi200686.txt"; 
// read raw text as array 
$raw = file($source) or die("Cannot read file"); 
// retrieve first and second lines (title and author) 
$slug = array_shift($raw); 
$byline = array_shift($raw); 
// join remaining data into string 
$data = join('', $raw); 
// replace special characters with HTML entities 
// replace line breaks with <br /> 
$html = nl2br(htmlspecialchars($data)); 
// replace multiple spaces with single spaces 
$html = preg_replace('/ss+/', ' ', $html); 
// replace URLs with <a href...> elements 
$html = preg_replace('/s(w+://)(S+)/', ' <a href="" target="_blank"></a>', $html); 
// start building output page 
// add page header 
$output =<<< HEADER 
<html> 
<head> 
<style> 
.slug {font-size: 15pt; font-weight: bold} 
.byline { font-style: italic } 
</style> 
</head> 
<body> 
HEADER; 
// add page content 
$output .= "<div class='slug'>$slug</div>"; 
$output .= "<div class='byline'>By $byline</div><p />"; 
$output .= "<div>$html</div>"; 
// add page footer 
$output .=<<< FOOTER 
</body> 
</html> 
FOOTER; 
// display in browser 
echo $output; 
// AND/OR 
// write output to a new .html file 
file_put_contents(basename($source, substr($source, strpos($source, '.'))) . ".html", $output) or die("Cannot write file"); 
?>

第一步是把纯ASCII文件读取到一个PHP数组里。这通过file()函数很容易就可以完成,这个函数会把文件的每一行都转换成为一个用数字索引的数组中的元素。
然后,标题和作者行(我假设这两个都是文件的前两行)都通过array_shift()函数从数组里提取出来,放到单独的变量里。数组剩下的成员然后被连接成一个字符串。这个字符串现在就包括了整篇文章的正文。
文章正文里像“'”、“<”和“>”这样的特殊符号通过htmlspecialchars()函数被转换成相应的HTML符号。为了保留文章的原始格式,分行和分段通过nl2br()函数被转换成HTML的
元素。文章中间多个空格通过简单的字符串替换被压缩成为一个空格。
文章正文里的URL用正则表达式来检测,两边是元素。当页面在Web浏览器里显示的时候,它会把URL转换成为可点击的超链接。
然后用标准的HTML规则创建输出的HTML页面。文章的标题、作者和正文都用CSS样式规则格式化。尽管这段脚本没有这样做,但是你可以在这个地方自定义最终页面的外观,你可以向模板添加图形元素、颜色或者其他眩目的内容。
一旦HTML页面构建完成,它就可以被送到浏览器或者用file_put_contents()保存为静态文件。要注意的是,在保存的时候,原来的文件名会被分解,一个新的文件名(叫做filename.html)会为新创建的Web页面创建。你然后就可以把这个Web页面发布到Web服务器上、保存到光盘上或者对它进行进一步编辑。
注意:在使用这个脚本创建和保存HTML文件到磁盘的时候,你要确保这个脚本对文件保存的目录有写权限。
正如你看到的,假如你有标准格式的ASCII纯文本数据文件,你可以相当迅速用PHP把它转换成为可使用的Web页面。如果你已经有了一个Web网站,并计划把新的Web页面加入进来,那么调试页面生成器所使用的模板,使之适应原有Web网站的外观是相当容易的
PHP 相关文章推荐
php xfocus防注入资料
Apr 27 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
php中explode与split的区别介绍
Oct 03 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php链表用法实例分析
Jul 09 PHP
PHP生成树的方法
Jul 28 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
php实现留言板功能(会话控制)
May 23 PHP
PHP高级OOP技术演示
Aug 27 #PHP
php 获取可变函数参数的函数
Aug 26 #PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 #PHP
php 文件夹删除、php清除缓存程序
Aug 25 #PHP
php 正则匹配函数体
Aug 25 #PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 #PHP
PHP 替换模板变量实现步骤
Aug 24 #PHP
You might like
php实现贪吃蛇小游戏
2016/07/26 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python模拟用户登录验证
2017/09/11 Python
Python实现进程同步和通信的方法
2018/01/02 Python
查看django版本的方法分享
2018/05/14 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
小学教师国培感言
2014/02/08 职场文书
导购员的岗位职责
2014/02/08 职场文书
幼儿教师培训感言
2014/03/08 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
企业宗旨标语
2014/06/10 职场文书
农村门前三包责任书
2014/07/25 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL