Jump to content

My Function looks tooo complex


onlyican

Recommended Posts

  • Hey.

I am not 100% with it at the moment, bit under the weather. (If you ask why I am working, your not a developer)

 

Sob story aside (excuses really)

 

Basically I have built a function to manipulate BB Code to HTM

I wrote it, looked back at it and thought, my god this looks overly complex for this sort of thing.

 

It works but just seems like a lot of wasted code.

 

Please help me narrow this down

 

public function BB2HTM($str){
    	/*
    	Valid BB Code
    	[b] / [/b] = STRONG
    	[i] / [/i] = Italic
    	[u] / [/u] = Underline
    	[url=http://www.example.com]My Example[/url] = A Link
    	[size=X]bla[/size] = Change font size where X is percentage of actual size, default options 50=>small, 100=>normal, 200->large
    	[list]bla[/list] Handles Unordered Lists, with New Line being new list item
    	[list=X]bla[/list] Handles Ordered List, where X is start number, again New Line is New List item
    	*/
    	
    	/* First, we will do the basics, with a simple str_replace */
    		$str = nl2br($str);
		$arrBBCode = array('[b]', '[/b]', '[i]', '[/i]', '[u]', '[/u]');
		$arrHTMCode = array('<strong>', '</strong>', '<i>', '</i>', '<u>', '</u>');
		$str = str_replace($arrBBCode, $arrHTMCode, $str);
	//

	/* Now we want to handle a URL, open in new window */
		$regexURLPattern = '#(\[url\=(.*))(\])(.*?)(\[/url\])#is';
		preg_match_all($regexURLPattern, $str, $arrMatches);

		/* Loop through the results, build a valid HTM link and replace what we found with the correct format */
		for($i = 0; $i < count($arrMatches[0]); $i++){
			$strNewLink = '<a href="'.$arrMatches[2][$i].'" target="_blank">'.$arrMatches[4][$i].'</a>';
			$str = str_replace($arrMatches[0][$i], $strNewLink, $str);
		}
	/* End Handle URL */

	/* Now font size. User can maniplate the number on size so we want to check for this and limit, so someone dont put 1% and hide stuff or 10000% and break the website */

	$regexSizePattarn = '#(\[size=)([0-9]*)(\])#';
	preg_match_all($regexSizePattarn, $str, $arrMatches);

	/* Loop through the results, put a check on the number */


	for($i=0; $i < count($arrMatches[0]); $i++){
		if($arrMatches[2][$i] > 200){ 
			$arrMatches[2][$i] = 200;
		}elseif($arrMatches[2][$i] < 100){
			$arrMatches[2][$i] = 100;
		}
		/* Change it and close the tag, keep the str_replace with the opener for later editing / auditing */
		$strFontTag = '<span style="font-size:'.$arrMatches[2][$i].'%">';
		$str = str_replace($arrMatches[0][$i], $strFontTag, $str);

	}
	$str = str_replace('[/size]', '</span>', $str);

	/* End Handle Size */

	/* Is it a list, What list, where to start */

	$regexListPattern = '#(\[list)(=?)([0-9]*)?(\])(.*?)(\[/list\])#is';
	preg_match_all($regexListPattern, $str, $arrMatches);
	/* Loop through our results */
	for($i = 0; $i < count($arrMatches[0]); $i++){
		$strLstItems = '';
		/* Is it unordered or Ordered? Where do we start, 1 or 100 
		Add our closing tag here as well in variable, save doing this again*/
		if($arrMatches[3][$i] != ''){

			$strEndLst = '</ol>';
			if($arrMatches[3][$i] > 1){
				$strLstItems = '<ol start="'.$strLstItems[3][$i].'">';
			}else{
				$strLstItems = '<ol>';
			}
		}else{
			$strEndLst = '</ul>';
			$strLstItems = '<ul>';
		}
		/* We can split the New lines as we done nl2br() as the top, we split on br */
		$arrListItems = split("<br />", $arrMatches[5][$i]);


		for($x = 0; $x < count($arrListItems); $x++){
			/* We dont want empty items, where people double enter or something */
			if($arrListItems[$x] != ''){
				$strLstItems .= '<li>'.$arrListItems[$x].'</li>';
			}
		}
		/* Close the item as set above and replace it in our main str */
		$strLstItems .= $strEndLst;

		$str = str_replace($arrMatches[0][$i], $strLstItems, $str);
	}
	/* End Handle Lists */

	return $str;

    }

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.