存档:

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. ajax几种请求几种类型

    jquery向服务器发送一个ajax请求后,可以返回多种类型的数据格式,包括:html,xml,json,text等. 首先说一下jquery中ajax标准的格式. $.ajax({ url: &qu ...

  2. random模块 参生随机数

    记得要import random模块 随机整数: >>> import random >>> random.randint(0,99) 21 随机选取0到100间的 ...

  3. html5物理定位误差大 解决办法

    学生党在做比赛作品,项目中需求要用到定位功能并以地图形式展现.所以思路就是用h5的geolocation 获取经纬度,通过百度地图api将经纬度转换成详细的地址以及地图.在笔记本电脑做测试,定位总有超 ...

  4. vlc源码分析(五) 流媒体的音视频同步

    vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放.首先了解两个概念:stream clock和sy ...

  5. .NET Core中基类可以反射子类的成员

    我们定义一个类DemoA,再定义一个类DemoB继承DemoA.当构造一个DemoB类对象后,我们可以通过其调用基类DemoA中的方法来反射子类DemoB的成员. 新建一个.NET Core控制台项目 ...

  6. sharepoint 配置个人网站容量

    we have a SharePoint 2013 Standard edition implementation and 80 users. We are now starting to use M ...

  7. JAVA项目服务器部署

    1.下载 Java JDK 搜索jdk下载,然后进入JAVA官方网站jdk下载页,选择自己的对应的操作系统,点击下载 https://www.oracle.com/technetwork/java/j ...

  8. 1010 一元多项式求导(用while接收输入)

    题目: 知识点for me: 该题的输入并非是按回车后数据输入完毕也不是给定数据长度,而是输入到文件末尾.可以有以下三种写法: (1)while(cin>>a)  (2)while(sca ...

  9. java 一个数字的位数不够怎么在前面加0

    import java.text.DecimalFormat; //(1).如果数字1是字符串,如下处理: String str1="1"; DecimalFormat df=ne ...

  10. Delphi Android USB Interface with the G2

    来源:http://www.bverhue.nl/g2dev/?p=65 Delphi Android USB Interface with the G2 Leave a reply I first ...