php:细说PHP之稿子发布操作实2
程序员文章站
2022-05-17 14:30:35
...
php:细说PHP之文章发布操作实2
然后我们来看看,最核心的acticle_class.php怎么运作。
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=([^\[\', '', '', //声明正则表达式的替换数组 '', '', '', '', '', '', '', '', '\\2', '\\3', '\\1@\\2', '\\3', '', '
', '', '', '' ); return preg_replace($pattern, $replace, $message); //调用正则表达式的替换函数 } private function cuturl($url) { //此私有方法用来剪切长的URL,并加上链接 $length = 65; $urllink = "'; if(strlen($url) > $length) { //如果URL长度大于65则剪切 $url = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3)); } $urllink .= $url.''; 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('', //声明表情的替换数组 '', '', '', ''); 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='"".highlight_string("\\1",true).""'; return preg_replace($pattern, $replace, $message); } private function prasePer($message) { //此方法用来将文章原样输出,即加上标记 return '该类主要内容就是它的构造方法,遍历parse数组里面的每一项,对message做一次处理。'.$message.''; } private function nltobr($message) { //此私有方法用来将换行符号转为
标记 return nl2br($message); //调用字符串处理函数nl2br() } public function getSubject() { //此方法为公有的,返回文章的标题 return ''.$this->subject.'
'; } public function getMessage() { //此方法为公有的,返回文章的主体内容 return $this->message; } }?>基本上都是直接调用php自带的字符串的处理函数,还有问题就是利用正则表达式替换。
preg_replace($pattern, $replace, $message),第一个参数表示正则表达式模式数组,第二个参数表示将这个遇到正则表达式替换后的内容,也是数组,两者应该是一一对应的。
正则表达式基本上就是/XXXXXX /yyy 以/... /表示分隔,yyy表示匹配参数 中间有|表示或,具体可以自己参考网上资料或者书。常常用在我们的用户登录上。
相关文章
相关视频