存档:

post.php

 <form method="post" action="viewthread.php" target="_blank">
<h2 align="center">发表文章实例开发</h2>
<div style="width:200;float:left">
<h5>选项</h5>
<ul style="list-style:none;margin:0px;padding:0px">
<li><input type="checkbox" name="parse[]" value="1">删除HTML标签</li>
<li><input type="checkbox" name="parse[]" value="2">转换HTML标签为实体</li>
<li><input type="checkbox" name="parse[]" value="3">使用UBB代码</li>
<li><input type="checkbox" name="parse[]" value="4">开启URL识别</li>
<li title="可用的表情:
【:),/wx,微笑】【:@,/fn,发怒】
【:kiss,/kill,/sa,示爱】
【:p,/tx,偷笑】【:q,/dk,大哭】">
<input type="checkbox" name="parse[]" value="5">使用表情</li>
<li><input type="checkbox" name="parse[]" value="6">禁用非法关键字</li>
<li><input type="checkbox" name="parse[]" value="7">PHP代码设为高亮</li>
<li><input type="checkbox" name="parse[]" value="8">原样显示</li>
<li><input type="checkbox" name="parse[]" value="9">同步换行</li>
</ul>
</div>
<div style="width:300;float:left">
<h5>标题<input type="text" name="subject" size=50></h5>
<h5>内容<textarea rows="7" cols="50" name="message"></textarea></h5>
<input type="submit" name="replysubmit" value="发表帖子">
</div>
</form>

viewthread.php

 <?php
require "article.class.php";
$article = new Article($_POST["subject"],$_POST["message"],$_POST["parse"]);
echo $article->getSubject();
echo "<hr>";
echo $article->getMessage();
?>

article.class.php

 <?php
class Article{
private $subject;
private $message;
function __construct($subject="",$message="",$parse=array()){
$this->subject = $this->html2Text($subject);
if(!empty($parse)){
foreach($parse as $value){
switch($value){
case 1:
$message = $this->delHtmlTags($message);
break;
case 2:
$message = $this->html2Text($message);
break;
case 3:
$message = $this->UBBCode2Html($message);
break;
case 4:
$message = $this->parseURL($message);
break;
case 5:
$message = $this->parseSmilies($message);
break;
case 6:
$message = $this->disableKeyWords($message);
break;
case 7:
$message = $this->prasePHPCode($message);
break;
case 8:
$message = $this->prasePer($message);
break;
case 9:
$message = $this->nltobr($message);
break;
}
}
}
$this->message = $message;
} private function delHtmlTags($message){
return strip_tags($message);
} private function html2Text($message){
return htmlspecialchars(stripslashes($message));
} private function UBBCode2Html($message){
$pattern = array(
'/\[b\]/i','/\[\/b\]/i','/\[i\]/i',
'/\[\/i\]/i','/\[u\]/i','/\[\/u\]/i',
'/\[font=([^\[\<]+?)\]/i',
'/\[color=([#\w]+?)\]/i',
'/\[size=(\d+?)\]/i',
'/\[size=(\d+(\.\d+)?(px|pt|in|cm|mm|pc|em|ex|%)+?)\]/i',
'/\[align=(left|center|right)\]/i',
'/\[url=www.([^\["\']+?)\](.+?)\[\/url\]/is',
'/\[url=(https?|ftp|gopher|news|telnet){1}:\/\/([^\["\']+?)\](.+?)\[\/url]/is',
'/\[email\]\s*([a-z0-9\-_.+]+)@([a-z0-9\-_.]+)\s*\[\/email\]/i',
'/\[email=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\](.+?)\[\/email\]/is',
'/\[img\](.+?)\[\/img\]/',
'/\[\/color\]/i',
'/\[\/size\]/i',
'/\[\/font\]/i',
'/\[\/align\]/'
); $replace = array(
'<b>','</b>','<i>',
'</i>','<u>','</u>',
'<font face="\\1">',
'<font color="\\1">',
'<font size="\\1">',
'<font style=\"font-size:\\1\">',
'<p align="\\1">',
'<a href="http://www.\\1" target="_blank">\\2</a>',
'<a href="\\1://\\2" target="_blank">\\3</a>',
'<a href="mailto:\\1@\\2">\\1@\\2</a>',
'<a href="mailto:\\1@\\2">\\3</a>',
'<img src="\\1">',
'</font>','</font>','</font>','</p>'
);
return preg_replace($pattern,$replace,$message);
} private function cuturl($url){
$length = 65;
$url = substr(strtolower($url),0,4) == 'www.'?"http://$url":$url;
$urllink = "<a href=\"".$url.'"target="_blank">';
if(strlen($url)>$length){
$url = substr($url,0,intval($length*0.5)).'...'.substr($url,-intval($length*0.3));
}
$urllink .=$url.'</a>';
return $urllink;
} private function parseURL($message){
$urlPattern = "/(www.|https?:\/\/|ftp:\/\/|news:\/\/|telnet:\/\/){1}([^\[\"']+?)(com|net|org)(\/[\w-\.\/?\%\&\=]*)?/ei";
return preg_replace($urlPattern,"\$this->cuturl('\\1\\2\\3\\4')",$message);
} private function parseSmilies($message){
$pattern = array(
'/:\)|\/wx|微笑/i',
'/:@|\/fn|发怒/i',
'/:kiss|\/kill|\/sa|示爱/',
'/:p|\/tx|偷笑/i',
'/:q|\/dk|大哭/i'
);
$replace = array(
'<img src="smilies/smile.png" alt="微笑">',
'<img src="smilies/huffy.png" alt="发怒">',
'<img src="smilies/kiss.png" alt="示爱">',
'<img src="smilies/titter.png" alt="偷笑">',
'<img src="smilies/cry.png" alt="大哭">'
);
return preg_replace($pattern,$replace,$message);
} private function disableKeyWords($message){
$keywords_disable = array("非法关键字一","非法关键字二","非法关键字三");
return str_replace($keywords_disable,"**",$message);
} private function prasePHPCode($message){
$pattern = '/(<\?.*?\?>)/ise';
$replace = '"<pre style=\"background:#ddd\">".highlight_string("\\1",true)."</pre>"';
return preg_replace($pattern,$replace,$message);
} private function prasePer($message){
return '<pre>'.$message.'</pre>';
} private function nltobr($message){
return nl2br($message);
} public function getSubject(){
return '<h1 align=center>'.$this->subject.'</h1>';
} public function getMessage(){
return $this->message;
}
}
?>

结果如下:

php开发文章发布示例(正则表达式实例开发)的更多相关文章

  1. 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...

  2. ----转载----【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...

  3. 使用JSP/Servalet技术开发新闻发布系统------动态网页开发基础

    什么是动态网页? 动态网页是指在服务器端运行的程序或者网页,它们会随不同客户.不同时间,返回不同的网页. 动态网页的特点? (1).交互性:即网页会根据用户的要求和选择而动态改变和响应.采用动态网页技 ...

  4. Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统

    一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...

  5. 《Ionic 2 实例开发》发布

    Ionic 2系列教程集结成册,在百度阅读上架发布,名为<Ionic 2实例开发>(点击书名将打开地址:http://yuedu.baidu.com/ebook/ba1bca51e4189 ...

  6. 一步步开发自己的博客 .NET版(4、文章发布功能)百度编辑器

    前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做个插件,任何网站上的技术 ...

  7. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  8. iOS开发之详解正则表达式

    本文由Charles翻自raywenderlich原文:NSRegularExpression Tutorial: Getting Started更新提示:本教程被James Frost更新到了iOS ...

  9. 如何开发和发布一个Vue插件

    前言 Vue 项目开发过程中,经常用到插件,比如原生插件 vue-router.vuex,还有 element-ui 提供的 notify.message 等等.这些插件让我们的开发变得更简单更高效. ...

随机推荐

  1. 1、Android-活动(下)

    1.4.活动的生命周期 对于活动来说生命周期的理解时非常重要的 当对其生命周期有了足够的了解,可以很好的写出程序 1.4.1.返回栈 Android中的活动是可以层叠的 没启动一个新的活动,就会立即覆 ...

  2. ethereumjs/ethereumjs-vm-1-简介

    https://github.com/ethereumjs/ethereumjs-vm 其实这就是怎么自己使用该模块来生成一个类似geth客户端的以太坊虚拟机,然后进行各类区块链操作 SYNOPSIS ...

  3. 浅谈Fluent Ribbon 中的SplitButton

    Fluent Ribbon Control Suite 就不做介绍了,网上的例子比较多,类似Office2007及以后版本的图形界面(菜单栏).官网地址:https://github.com/flue ...

  4. linux性能指标及分析工具

    一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上 ...

  5. HttpClient使用小结

    使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1. 创建HttpClient对象. 2. 如果需要发送GET请求,创建HttpGet对象:如果需要发送POST请求,创建Http ...

  6. Intellij IDEA 2018.2.2 SpringBoot热启动 (Maven)

    一.IDEA 工具配置 1. 打开IDEA 设置界面,选择编译,按图打勾. 2 . 然后 Shift+Ctrl+Alt+/,选择Registry 3 . compiler.automake.allow ...

  7. oracle入门(二)

    ### 一,视图 ```1. 什么是视图    视图是一张虚表, 可以把视图看成表使用(增删改查),视图中没有数据,所有的数据都在基本表中(tables)    封装了一个复杂的DQL    操作视图 ...

  8. javascript json对象操作(基本增删改查)

    /** * Json对象操作,增删改查 * * @author lellansin * @blog www.lellansin.com * @version 0.1 * * 解决一些常见的问题 * g ...

  9. LFS搭建第一天补充

    1.选择lfs的iso 2.启动虚拟机,进入以下界面直接按回车键 3. 选择下面的时间 4.直接默认本地时间 5.语言格式选择UTF-8 6.默认 7.直接回车,进入系统 8.对hda盘进行分区,我分 ...

  10. 郁金香指标开源库的使用--(tulipindicators-0.8.4)

    瞎逛发现最新出了这么一个指标库,有100多种指标的函数库,文档写的比较好,重要的是作者一直在维护. 把它编成库,然后测试一下,可用于自动交易,策略交易等开发. 1.下载地址 https://githu ...