首頁  >  文章  >  後端開發  >  php:细说PHP之稿子发布操作实2

php:细说PHP之稿子发布操作实2

WBOY
WBOY原創
2016-06-13 11:58:58838瀏覽

php:细说PHP之文章发布操作实2

然后我们来看看,最核心的acticle_class.php怎么运作。

<?php class Acticle {   //声明一个文章类,其中有两个成员属性标题和内容,如果需要还可以更多			private $subject;        //文章的标题成员属性		private $message;       //文章的主本内容成员属性				//构造方法,通过传入文章标题和文章主体和文章的操作选项数组创建文章对象		function __construct($subject=" ",$message=" ", $parse=array()) {			$this->subject=$this->html2Text($subject); //为文章标题赋初值,将HTML标记转为实体              			if(!empty($parse)) {            //如果用户选择了对文章的操作选项则条件成功				foreach($parse as $value) {  //用户选择了几个文章操作选项则循环几次					switch($value) {      //根据用户选择的不同选项,调用不同的内部方法处理						case 1:         //如果用户选择“删除HTML标签”选项时条件成立							$message=$this->delHtmlTags($message);  							break;						case 2:        //如果选择“转换HTML标签为实体”选项时条件成立							$message=$this->html2Text($message);							break;							case 3:        //如果用户选择“使用UBB代码”选项时条件成立							$message=$this->UBBCode2Html($message);							break;						case 4:        //如果用户选择“开启URL识别”选项时条件成立							$message=$this->parseURL($message);							break;						case 5:        //如果用户选择“使用表情”选项时条件成立							$message=$this->parseSmilies($message);							break;						case 6:        //如果用户选择“禁用非法关键字”选项时条件成立							$message=$this->disableKeyWords($message);							break;						case 7:        //如果用户选择“PHP代码设为高亮”选项时条件成立							$message=$this->prasePHPCode($message);							break;						case 8:        //如果用户选择“原样显示”选项时条件成立							$message=$this->prasePer($message);							break;						case 9:        //如果用户选择“同步换行”选项时条件成立							$message=$this->nltobr($message);							break;					}				}				}				$this->message=$message;         //给成员属性$message赋初值,		}				private function delHtmlTags($message) {  //此私有方法有来删除HTML标记			return strip_tags($message);         //调用字符串处理函数删除HTML标记		}		private function html2Text($message) {   //此私有方法有来将HTML标记转为HTML实体			return htmlSpecialChars(stripSlashes($message));  //调用字符串处理函数进行操作		}		private function UBBCode2Html($message) {   //此私有方法有来解析UBB代码			$pattern=array('/\[b\]/i', '/\[\/b\]/i', '/\[i\]/i',   //声明正则表达式的模板数组			       	'/\[\/i\]/i', '/\[u\]/i', '/\[\/u\]/i',              				'/\[font=([^\[\', '', '<i>',    //声明正则表达式的替换数组				'</i>', '<u>', '</u>',                     				'<font face="\\1">',                           				'<font color="\\1">',                         				'<font size="\\1">',                          				'<font style='\"font-size:'>',                 				'<p align="\\1">',                             				'<a href="http://www.%5C%5C1" target="_blank">\\2</a>', 				'<a href="%5C%5C1://%5C%5C2" target="_blank">\\3</a>',       				'<a href="mailto:%5C%5C1@%5C%5C2">\\1@\\2</a>',          				'<a href="mailto:%5C%5C1@%5C%5C2">\\3</a>',              				'<img  src="%5C%5C1" alt="php:细说PHP之稿子发布操作实2" >',                            				'</p></font>', '</font>', '</font>', ''             			);			return preg_replace($pattern, $replace, $message);  //调用正则表达式的替换函数		}		private function cuturl($url) {      //此私有方法用来剪切长的URL,并加上链接			$length = 65;			$urllink = "<a href="%5C%22%22.(substr(strtolower(%24url)," : target="_blank">';			if(strlen($url) > $length) {    //如果URL长度大于65则剪切				$url = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));			}			$urllink .= $url.'</a>';			return $urllink;		}		private function parseURL($message) {   //此私有方法用来解析URL,将其加上链接$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.gif" alt="微笑">',  //声明表情的替换数组					'<img src="smilies/huffy.gif" alt="发怒">',					'<img src="smilies/kiss.gif" alt="示爱">',					'<img src="smilies/titter.gif" alt="偷笑">',					'<img src="smilies/cry.gif" alt="大哭">');			return preg_replace($pattern, $replace, $message);	     //调用正则表达式的替换函数		}				private function disableKeyWords($message) {   //此方法用来屏蔽文章中的非法关键字			$keywords_disable=array("非法关键字一","非法关键字二","非法关键字三");			return str_replace($keywords_disable,"**",$message);		}		private function prasePHPCode($message) {    //此方法用来将PHP代码设置为高亮			$pattern='/()/ise';			$replace='"<pre   style="max-width:90%"background:#ddd\"'>".highlight_string("\\1",true)."
"'; return preg_replace($pattern, $replace, $message); } private function prasePer($message) { //此方法用来将文章原样输出,即加上
标记			return '<pre class="brush:php;toolbar:false">'.$message.'
'; } private function nltobr($message) { //此私有方法用来将换行符号转为
标记 return nl2br($message); //调用字符串处理函数nl2br() } public function getSubject() { //此方法为公有的,返回文章的标题 return '

'.$this->subject.'

'; } public function getMessage() { //此方法为公有的,返回文章的主体内容 return $this->message; } }?>该类主要内容就是它的构造方法,遍历parse数组里面的每一项,对message做一次处理。

基本上都是直接调用php自带的字符串的处理函数,还有问题就是利用正则表达式替换。

preg_replace($pattern, $replace, $message),第一个参数表示正则表达式模式数组,第二个参数表示将这个遇到正则表达式替换后的内容,也是数组,两者应该是一一对应的。

正则表达式基本上就是/XXXXXX /yyy 以/... /表示分隔,yyy表示匹配参数 中间有|表示或,具体可以自己参考网上资料或者书。常常用在我们的用户登录上。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn