存档:

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. Ext之grid內編輯

    Ext.grid.Panel xtype:gridpanel,grid 如果要完成在grid中編輯的功能.首先要填加 selType: 'cellmodel',    plugins: [       ...

  2. Spring(十一)之AOP

    Spring 框架的一个关键组件是面向方面的编程(AOP)框架.面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点.跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于 ...

  3. Unity3D-制作火焰效果

    1.插件的准备 随着官网上的迭代更新,连下载按钮都找了好久,今天制作的火焰效果要依赖一个插件,LowPoly Environment Pack 输入网址unity3d.com在Assert Store ...

  4. UVA - 1197 (简单并查集计数)

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...

  5. SSAS中CUBE的多对多关系既可以出现在中间事实表上也可以出现在中间维度表上

    开发过SSAS中CUBE的朋友,肯定都知道维度用法中的多对多关系, 这篇文章不想详细阐述多对多关系在CUBE中的结构,详情请在网上寻找CUBE多对多关系的介绍资料. 下面是是一个典型的CUBE中多对多 ...

  6. 25条提高iOS App性能的技巧和诀窍

    25条提高iOS App性能的技巧和诀窍 当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核. 然而,由于IO ...

  7. js怎样得出数组中某个数据最大连续出现的次数

     1:js怎样得出数组中某个数据最大连续出现的次数 var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ;    var j  = 0 ;    var max  ...

  8. Centos 批量分发脚本

    ## Centos / ## #!/bin/sh file="$1" remotedir="$2" filename=$(|awk -F '/' '{print ...

  9. shell习题第4题:监控ip地址存活

    [题目要求] 设计一个脚本,监控远程的一台机器(ip为192.168.1.100)的存活状态,当发现宕机的时候发一份邮件给自己 [核心要点] ping -c10 192.168.1.100通过 pin ...

  10. React学习(一)

    一. 允许HTML和JavaScript代码混写,使用JSX语法:遇到HTML标签就用HTML规则解析,遇到{}的代码块就用js解析 var names = ['Alice', 'Emily', 'K ...