Jump to content

My Function looks tooo complex


onlyican
 Share

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.

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.

 Share

×
×
  • 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.