时间:2021-07-01 10:21:17 帮助过:32人阅读
- dddd
- <!--?phpclass BBCode { public function __construct(){} private function showBBcodes($text) { // BBcode array $find = array( '~\[b\](.*?)\[/b\]~s', '~\[i\](.*?)\[/i\]~s', '~\[u\](.*?)\[/u\]~s', '~\[quote\](.*?)\[/quote\]~s', '~\[table\](.*?)\[/table\]~s', '~\[tr\](.*?)\[/tr\]~s', '~\[td\](.*?)\[/td\]~s', '~\[justify\](.*?)\[/justify\]~s', '~\[center\](.*?)\[/center\]~s', '~\[right\](.*?)\[/right\]~s', '~\[left\](.*?)\[/left\]~s', '~\[size=(.*?)\](.*?)\[/size\]~s', '~\[color=(.*?)\](.*?)\[/color\]~s', '~\[font=(.*?)\](.*?)\[/font\]~s', '~\[url=((?:ftp|https?)://.*?)\](.*?)\[/url\]~s', '~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s', '/\[img=(\d+)x(\d+)\](.*?)\[\/img\]/is', '~\[youtube\](.*?)\[/youtube\]~s', ); // HTML tags to replace BBcode $replace = array( '<b-->https://www.gxlcms.com/$1', '<i>https://www.gxlcms.com/$1</i>', '<span style="text-decoration:underline;">https://www.gxlcms.com/$1</span>', '<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li>https://www.gxlcms.com/$1<!--'.'pre-->', 'https://www.gxlcms.com/$1<table></table>', 'https://www.gxlcms.com/$1', 'https://www.gxlcms.com/$1', 'https://www.gxlcms.com/$1', 'https://www.gxlcms.com/$1', 'https://www.gxlcms.com/$1', 'https://www.gxlcms.com/$1', '<span class="hhttps://www.gxlcms.com/$1">$2</span>', '<span style="color:https://www.gxlcms.com/$1;">$2</span>', '<span style="font:https://www.gxlcms.com/$1;">$2</span>', '$2', '<img src="https://www.gxlcms.com/$1" alt="">', '<img width="https://www.gxlcms.com/$1" height="$2" src="https://www.gxlcms.com/$3" alt="">', '<iframe width="560" height="315" src="http://www.youtube.com/embed/https://www.gxlcms.com/$1?wmode=opaque" data-youtube-id="https://www.gxlcms.com/$1" frameborder="0" allowfullscreen=""></iframe>' ); return nl2br(preg_replace($find,$replace,$text)); } //表情转义 private function parseSmiley($text){ // Smiley to image $smileys = array( ':wave:' => 'wave.gif', ':hahaha:' => 'hahaha.gif', ':hahahau:' => 'hahahau.gif', ':help:' => 'help.gif' ); // Now you need find and replace foreach($smileys as $smiley => $img){ $text = str_replace( $smiley, "<img src="https://www.gxlcms.com/{$img}" alt="{$smiley}">", $text ); } // Now only return it return $text; } //为连结自动加上A标签 private function linkAdd($content){ //提取替换出所有A标签(统一标记<{link}>) preg_match_all('/.*?<\/a>/i',$content,$linkList); $linkList=$linkList[0]; $str=preg_replace('/.*?<\/a>/i','<{link}>',$content); //提取替换出所有的IMG标签(统一标记<{img}>) preg_match_all('/<img[^>]+>/im',$content,$imgList); $imgList=$imgList[0]; $str=preg_replace('/<img[^>]+>/im','<{img}>',$str); //提取替换出所有的YOUTUBE标签(统一标记<{img}>) preg_match_all('/<iframe[^>]+>/im',$content,$youtubeList); $youtubeList=$youtubeList[0]; $str=preg_replace('/<iframe[^>]+>/im','<{iframe}>',$str); //提取替换标准的URL地址 $str=preg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)','\\0',$str); //还原A统一标记为原来的A标签 $arrLen=count($linkList); for($i=0;$i<$arrLen;$i++){ $str=preg_replace('/<{link}>/',$linkList[$i],$str,1); } //还原IMG统一标记为原来的IMG标签 $arrLen2=count($imgList); for($i=0;$i<$arrLen2;$i++){ $str=preg_replace('/<{img}>/',$imgList[$i],$str,1); } //还原IMG统一标记为原来的YOUTUBE标签 $arrLen2=count($youtubeList); for($i=0;$i<$arrLen2;$i++){ $str=preg_replace('/<{iframe}>/',$youtubeList[$i],$str,1); } return $str; } public function parser($message){ $parser_content = $message; $parser_content = $this->showBBcodes($parser_content); $parser_content = $this->linkAdd($parser_content); $parser_content = $this->parseSmiley($parser_content); return $parser_content; }}</iframe[^></iframe[^></img[^></img[^></li></ol></pre> <p> </p> <p></p> <br> <h2>回复讨论(解决方案)</h2> <p class="sougouAnswer"> private function showBBcodes($text) { <br> $text = htmlspecialchars($text); //编码已存在的 HTML <br> preg_match_all('#\[code\](.*?)\[/code]#is', $text, $stack); <br> <br> //原来的数组赋值 <br> <br> $text = nl2br(preg_replace($find,$replace,$text)); <br> foreach($stack[1] as $t) { <br> $text = preg_replsce('#\[code\].*?\[/code]#is', $t, 1); <br> } <br> return $text; <br> } </p> <p class="sougouAnswer"> 大哥,谢谢提醒 <br> 竟然忘了 htmlspecialchars <br> <br> <br> 但有关[code] <br> </p><pre class="sycode layui-box layui-code-view layui-code-notepad" name="code"><ol class="layui-code-ol"><li> $text = preg_replace('#\[code\].*?\</li></ol></pre>#is', $t, 1); [/code] <br> 这样不知为什么不行,只要整篇内容有包含 [code]...就整篇内容变成 "1" <br> <br> 后来改成 : <br> <pre class="sycode layui-box layui-code-view layui-code-notepad" name="code"><ol class="layui-code-ol"><li> $text = preg_replace('#\[code\].*?\</li></ol></pre>#is', $t, $text); [/code] <br> <br> <strong>改这样<br> 有没有什么大问题吗?</strong> <p></p> <p class="sougouAnswer"> $text = preg_replsce('#\[code\].*?\[/code]#is', $t, $text, 1); <br> 不好意思,写漏了 </p> <p class="sougouAnswer"> 不知为什么出不了代码 <br> 本代大哥你提供的是 <br> <br> $text = preg_replace('#\[code\].*?\[/code]#is', $t, 1); <br> <br> <br> 这样不知为什么不行,只要整篇内容有包含 [code]...就整篇内容变成 "1" <br> <br> 要改成 <br> $text = preg_replace('#\[code\].*?\[/code]#is', $t, $text); <br> <br> 才能用 <br> <br> 请教下这样会有大问题吗? </p> <p class="sougouAnswer"> </p><p class="yy"> $text = preg_replsce('#\[code\].*?\[/code]#is', $t, $text, 1); <br> 不好意思,写漏了 </p>原来这样 <br> 明白 <br> 太感谢了