Discuz!开发之HTML转Discuz代码(bbcode)函数html2bbcode() - chenjian

时间:2024-04-15 12:58:29

定义文件:\source\function\function_editor.php
函数定义:

function html2bbcode($text) {
	$text = strip_tags($text, \'<table><tr><td><b><strong><i><em><u><a><div><span><p><strike><blockquote><ol><ul><li><font><img><br><br/><h1><h2><h3><h4><h5><h6><script>\');


	if(ismozilla()) {
		$text = preg_replace("/(?<!<br>|<br \/>|\r)(\r\n|\n|\r)/", \' \', $text);
	}


	$pregfind = array(
		"/<script.*>.*<\/script>/siU",
		\'/on(mousewheel|mouseover|click|load|onload|submit|focus|blur)="[^"]*"/i\',
		"/(\r\n|\n|\r)/",
		"/<table([^>]*(width|background|background-color|bgcolor)[^>]*)>/siUe",
		"/<table.*>/siU",
		"/<tr.*>/siU",
		"/<td>/i",
		"/<td(.+)>/siUe",
		"/<\/td>/i",
		"/<\/tr>/i",
		"/<\/table>/i",
		\'/<h([0-9]+)[^>]*>/siUe\',
		\'/<\/h([0-9]+)>/siU\',
		"/<img[^>]+smilieid=\"(\d+)\".*>/esiU",
		"/<img([^>]*src[^>]*)>/eiU",
		"/<a\s+?name=.+?\".\">(.+?)<\/a>/is",
		"/<br.*>/siU",
		"/<span\s+?style=\"float:\s+(left|right);\">(.+?)<\/span>/is",
	);
	$pregreplace = array(
		\'\',
		\'\',
		\'\',
		"tabletag(\'\\1\')",
		\'[table]\',
		\'[tr]\',
		\'[td]\',
		"tdtag(\'\\1\')",
		\'[/td]\',
		\'[/tr]\',
		\'[/table]\',
		"\"[size=\".(7 - \\1).\"]\"",
		"[/size]\n\n",
		"smileycode(\'\\1\')",
		"imgtag(\'\\1\')",
		\'\1\',
		"\n",
		"[float=\\1]\\2[/float]",
	);
	$text = preg_replace($pregfind, $pregreplace, $text);


	$text = recursion(\'b\', $text, \'simpletag\', \'b\');
	$text = recursion(\'strong\', $text, \'simpletag\', \'b\');
	$text = recursion(\'i\', $text, \'simpletag\', \'i\');
	$text = recursion(\'em\', $text, \'simpletag\', \'i\');
	$text = recursion(\'u\', $text, \'simpletag\', \'u\');
	$text = recursion(\'a\', $text, \'atag\');
	$text = recursion(\'font\', $text, \'fonttag\');
	$text = recursion(\'blockquote\', $text, \'simpletag\', \'indent\');
	$text = recursion(\'ol\', $text, \'listtag\');
	$text = recursion(\'ul\', $text, \'listtag\');
	$text = recursion(\'div\', $text, \'divtag\');
	$text = recursion(\'span\', $text, \'spantag\');
	$text = recursion(\'p\', $text, \'ptag\');


	$pregfind = array("/(?<!\r|\n|^)\[(\/list|list|\*)\]/", "/<li>(.*)((?=<li>)|<\/li>)/iU", "/<p.*>/iU", "/<p><\/p>/i", "/(<a>|<\/a>|<\/li>)/is", "/<\/?(A|LI|FONT|DIV|SPAN)>/siU", "/\[url[^\]]*\]\[\/url\]/i", "/\[url=javascript:[^\]]*\](.+?)\[\/url\]/is");
	$pregreplace = array("\n[\\1]", "\\1\n", "\n", \'\', \'\', \'\', \'\', "\\1");
	$text = preg_replace($pregfind, $pregreplace, $text);


	$strfind = array(\' \', \'<\', \'>\', \'&\');
	$strreplace = array(\' \', \'<\', \'>\', \'&\');
	$text = str_replace($strfind, $strreplace, $text);


	return dhtmlspecialchars(trim($text));
}

  使用举例:

require_once libfile(\'function/editor\');
$html=\'<strong>这里是加粗文本</strong>\';
$bbcode = html2bbcode($html);
echo $bbcode;
//输出:[b]这里是加粗文本[/b]

  

 

posted on 2017-10-18 20:52  chenjian  阅读(325)  评论(0编辑  收藏  举报