xRhysx Posted March 14, 2006 Share Posted March 14, 2006 i'm trying to make a tutorial page look really neat, by using the highlight_string() function in php. it doesen't seem to work, i've tried it in so many ways. maybe because of the way it's doing things. i'll explain...the tutorials are in a database. i'm using a bbcode.php to put in bold text, smilies etc.. and [code=php:0][/code] for the php tags, as it has problems with echo'ing these (obviously lol). at the end it returns the edited string.i'm using echo convert_bbcodes( $content ); to show the tutorial, with all the editited text. i've placed highlight_string() in both files the bbcode and tutorials files, i've placed it everywhere. eg:echo highlight_string(convert_bbcodes( $content ));echo convert_bbcodes(highlight_string( $content ));everytime i've tried it, i either get an error, or it shows the html. any help? Quote Link to comment Share on other sites More sharing options...
txmedic03 Posted March 14, 2006 Share Posted March 14, 2006 Would need to see the code and the error. Quote Link to comment Share on other sites More sharing options...
xRhysx Posted March 14, 2006 Author Share Posted March 14, 2006 i'll make 2 example files and post the code in a bit... Quote Link to comment Share on other sites More sharing options...
obsidian Posted March 14, 2006 Share Posted March 14, 2006 [!--quoteo(post=354924:date=Mar 14 2006, 10:59 AM:name=xRhysx)--][div class=\'quotetop\']QUOTE(xRhysx @ Mar 14 2006, 10:59 AM) [snapback]354924[/snapback][/div][div class=\'quotemain\'][!--quotec--]i'll make 2 example files and post the code in a bit...[/quote]the issue is that you must TELL highlight_string() to return the value. by default, it only returns a TRUE or FALSE, so to run echo on it, you need to specify it to return the new string:[code]echo highlight_string(convert_bbcodes( $content ), true);[/code]hope this helps Quote Link to comment Share on other sites More sharing options...
xRhysx Posted March 14, 2006 Author Share Posted March 14, 2006 [!--quoteo(post=354966:date=Mar 14 2006, 05:52 PM:name=obsidian)--][div class=\'quotetop\']QUOTE(obsidian @ Mar 14 2006, 05:52 PM) [snapback]354966[/snapback][/div][div class=\'quotemain\'][!--quotec--]the issue is that you must TELL highlight_string() to return the value. by default, it only returns a TRUE or FALSE, so to run echo on it, you need to specify it to return the new string:[code]echo highlight_string(convert_bbcodes( $content ), true);[/code]hope this helps[/quote]no, because that will highlight all of the tutorial. the tutorials contain html aswell, and this causes html to show, not formatted. i need it to select only the php parts, and highlight that bit. i'm using bbcode [php [/code] tags for php code. i've done these files anyway.example: [a href=\"http://www.mfwp.net/test/test.php\" target=\"_blank\"]here[/a]test.php[code]<?php$dbhost = "localhost";$dbuser = "*****";$dbpass = "*****";$dbname = "*****";$connection = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());mysql_select_db($dbname, $connection) or die (mysql_error());$query = "SELECT * FROM tutorials WHERE category = 'test'";$result = mysql_query($query, $connection) or die (mysql_error());$data = mysql_fetch_array($result);$content = nl2br($data['content']);$title = $data['title'];include("bbcode.php");echo "$title<br><br>";echo convert_bbcodes( $content );?>[/code]bbcode.php[code]<?php$bb_codes = array( '[code]' => '<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#111111" style="border-collapse: collapse" /> <tr> <td bgcolor="#DFDFFF" /><strong>CODE</strong></td> </tr> <tr> <td>', '[/code]' => '</td></tr></table>');function convert_bbcodes( $t ){$search = array_keys( $GLOBALS['bb_codes'] );$t = str_replace( $search, $GLOBALS['bb_codes'], $t );$t = eregi_replace("\\[php\\]([^\\[]*)\\[/php\\]", "<?php<br>".highlight_string('\\1', true)."<br>?>",$t);return $t;}?>[/code]database tutorial:[!--quoteo--][div class=\'quotetop\']QUOTE[/div][div class=\'quotemain\'][!--quotec--]hey this is the output i get from the highlight_string function. all tutorials are placed into a database like this.also bbcode tags are used, which might be the problem, it's echo'ing the highlight_string, which i don't think likes being echo'ed. anyway, examples. you'll see how this is done in the code.[codetag][code=php:0]echo "my text or tutorial here, in this format.";[/code][/codetag][/quote]hopefully, you'll understand the problem i have, and come up with a soloution. thanks. Quote Link to comment Share on other sites More sharing options...
txmedic03 Posted March 14, 2006 Share Posted March 14, 2006 You don't need the bb code stuff, but you could pull out the php code highlight it and echo all the html before and after it after doing htmlentities to it. I'm sure someone else might have a better idea, but just off the top of my head... Quote Link to comment Share on other sites More sharing options...
xRhysx Posted March 15, 2006 Author Share Posted March 15, 2006 i use other stuff with the bbcode, not only the php tags. i can't think of any other way to do it either, stripping out only the php to highlight it. Quote Link to comment Share on other sites More sharing options...
txmedic03 Posted March 16, 2006 Share Posted March 16, 2006 I was just saying that instead of writing all the code as "[code=php:0] ~ [/code]", "<?php ~ ?>" becomes "<php ~ ?>", but if you are already using the bbcode stuff anyway no harm doing it that way either. The only thing I can think of is[code]substr($code, strpos($code, "[php]"), strpos($code, "[/php]")+6);[/code]That will work for $code where [code=php:0][/code] only occurs once, and you will need to retrieve the html before and after in a similar manner, but if [code=php:0] occurs more than once you would need a loop to run through them and retrieve all the html between them.Just a thought, let me know if you come up with something better. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.