Jump to content
Sign in to follow this  
Yell0w

ereg_replace(); hvordan lage [bbcodes] ?

Recommended Posts

trenger litt hjelp her, har problemer med å lage en

 som replacer med <table width="xx"><td></td></table> og sånt, førstedelen fungerer
 
Dette fungerer:
$kilden = ereg_replace("<","&",$kilden);
$kilden = ereg_replace(">","&",$kilden); 
 
 
Dette fungerer ikke:
$kilden = ereg_replace("[code]","<table width="xx"><td>",$kilden); 
$kilden = ereg_replace("

","</td></table>",$kilden);

 

om du kan hjelpe eller eventuelt har mulige erstattninger eller snippets hadde jeg blitt glad om du posta her eller maila meg tilbake :)

Share this post


Link to post

$kilden = ereg_replace("code","<table width="><td>",$kilden);

$kilden = ereg_replace("/code","</td></table>",$kilden);

 

(jeg fjerna [] på code for at den ikke skulle ta den som BBCode)

Share this post


Link to post

Kilden nu:

 

if ($kilden && $kilden) {

$kilden = ereg_replace("<","&",$kilden);

$kilden = ereg_replace(">","&",$kilden);

$kilden = ereg_replace("CODESTART","$codestart",$kilden);

$kilden = ereg_replace("CODEEND","$codeend",$kilden);

stripslashes($kilden);

}

 

viss jeg har CODESTART <? echo"something";?>

 

blir det seendes ut som dette:

 

<? echo"something";?>

 

trodde stripslashes ville fikse dette jeg? noen forslag?

Share this post


Link to post

du trenger ikke "" rundt variabler.

og jeg ville heller ha brukt str_replace().

ta en titt her:

http://no2.php.net/manual/en/function.str-replace.php

If you don't need fancy replacing rules, you should always use this function instead of ereg_replace() or preg_replace().

 

$codestart = "<table width="xx"><tr><td>";

$codeend = "</td></tr></table>";



$kilden = str_replace("code", $codestart, $kilden);

$kilden = str_replace("/code", $codeend, $kilden);

(måtte fjerne [] jeg og....)

Share this post


Link to post

får fremdeles " på echoen

 

koden:

 

<?

$codestart = "<br><table border="1" bgcolor="#FFFFCC" cellspacing="0" cellpadding="0"><tr><td height="100" valign="center" align="left">";

$codeend = "</td></tr></table><br>";

echo"Kilden før:";

echo"<br>";

echo"$kilden";

echo"<br>";echo"<br>";

if ($kilden && $kilden) {

$kilden = str_replace("<","&",$kilden);

$kilden = str_replace(">","&",$kilden);

$kilden = str_replace("CODESTART",$codestart,$kilden);

$kilden = str_replace("CODEEND",$codeend,$kilden);

stripslashes($kilden);

}

echo"<br>";

echo"Kilden etter:";

echo"<br>";

 

echo"$kilden";

?>

 

har du lyst å teste er det bare å kopiere koden og lagre som et php dokument

bare definer $kilden som feks. side.php?kilden=<?echo"test"?>

Share this post


Link to post

function code_replace($str) {

$codestart = "<br><table border="1" bgcolor="#FFFFCC" cellspacing="0" cellpadding="0"><tr><td height="100" valign="center" align="left">"; 

$codeend = "</td></tr></table><br>"; 



$str = str_replace("<","&", $str); 

$str = str_replace(">","&", $str); 

$str = str_replace("[code]", $codestart, $str); 

$str = str_replace("
", $codeend, $str);


stripslashes($str);

return $str;

}



echo "Kilden før:";



$replace = "

 

kjør den der du så skal det funke.

bare lagre det som en php fil så får du se...

Share this post


Link to post

Mange morsomme forslag her, men det enkleste, mest effektive, og mest feilsikre er nok å bruke regulere utrykk. Disse linjene finner MØNSTERET og bytter det ut. Se her:

$streng = "[code]Bla bla bla
";


$streng = preg_replace("/

 

På denne måten slipper du å bekymre deg om åpne bbcode-tagger. Da blir det helt enkelt ikke gjort noe med! (Hadde vært kjipt om noen la inn kun en [/code], og vips så er tabelloppsettet på nettsiden din vræka)

Share this post


Link to post

Glimrende tråd :) Driver med det samma nå. Prøvde å rappe kode fra phpbb forumet, men det gikk ikke så bra... hehe...

 

Tenkte også å lage knapper som setter inn koden slik som det er her når man poster. Altså setter inn (B), (u) eller (i) inn i textarea. (med [] istedenfor () seff) Samtidig at man kan merke tekst og klikke (B) så kommer det startkode og sluttkode automatisk rundt teksten.

 

Dette krever vel javascript og det kan jeg NULL av...

 

Noen som veit hvordan koden blir eller har fått ut riktig kode av phpbb2 kildekoden?

 

Takker for svar :)

 

Akke

Share this post


Link to post

Det er bare å rappe rett ut herifra, men det blir bare surr i andre nettlesere enn nyeste IE, mener jeg å huske, men her er nå iallefall den biten av den jeg bruker:

<form action="action.php" method="get" name="form">

 	<script language="JavaScript" type="text/javascript">

<!--

// bbCode control by

// subBlue design

// www.subBlue.com



// Startup variables

var imageTag = false;

var theSelection = false;



// Check for Browser & Platform for PC & IE specific bits

// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html

var clientPC = navigator.userAgent.toLowerCase(); // Get client info

var clientVer = parseInt(navigator.appVersion); // Get browser version



var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));

var is_nav  = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)

               && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)

               && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));



var is_win   = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));

var is_mac    = (clientPC.indexOf("mac")!=-1);





// Helpline nyhets

b_help = "Fet tekst: [b]tekst[/b]  (alt+b)";

i_help = "Kursiv tekst: [i]tekst[/i]  (alt+i)";

u_help = "Understreket tekst: [u]tekst[/u]  (alt+u)";

a_help = "Lukk alle åpne tagger";



// Define the bbCode tags

bbcode = new Array();

bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]');

imageTag = false;



// Shows the help nyhets in the helpline window

function helpline(help) {

document.form.helpbox.value = eval(help + "_help");

}





// Replacement for arrayname.length property

function getarraysize(thearray) {

for (i = 0; i < thearray.length; i++) {

 if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))

 	return i;

 }

return thearray.length;

}



// Replacement for arrayname.push(value) not implemented in IE until version 5.5

// Appends element to the array

function arraypush(thearray,value) {

thearray[ getarraysize(thearray) ] = value;

}



// Replacement for arrayname.pop() not implemented in IE until version 5.5

// Removes and returns the last element of an array

function arraypop(thearray) {

thearraysize = getarraysize(thearray);

retval = thearray[thearraysize - 1];

delete thearray[thearraysize - 1];

return retval;

}





function bbstyle(bbnumber) {



donotinsert = false;

theSelection = false;

bblast = 0;



if (bbnumber == -1) { // Close all open tags & default button names

 while (bbcode[0]) {

 	butnumber = arraypop(bbcode) - 1;

 	document.form.nyhet.value += bbtags[butnumber + 1];

 	buttext = eval('document.form.addbbcode' + butnumber + '.value');

 	eval('document.form.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');

 }

 imageTag = false; // All tags are closed including image tags :D

 document.form.nyhet.focus();

 return;

}



if ((clientVer >= 4) && is_ie && is_win)

 theSelection = document.selection.createRange().text; // Get text selection



if (theSelection) {

 // Add tags around selection

 document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];

 document.form.nyhet.focus();

 theSelection = '';

 return;

}



// Find last occurance of an open tag the same as the one just clicked

for (i = 0; i < bbcode.length; i++) {

 if (bbcode[i] == bbnumber+1) {

 	bblast = i;

 	donotinsert = true;

 }

}



if (donotinsert) {  // Close all open tags up to the one just clicked & default button names

 while (bbcode[bblast]) {

   butnumber = arraypop(bbcode) - 1;

   document.form.nyhet.value += bbtags[butnumber + 1];

   buttext = eval('document.form.addbbcode' + butnumber + '.value');

   eval('document.form.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');

   imageTag = false;

 	}

 	document.form.nyhet.focus();

 	return;

} else { // Open tags



 if (imageTag && (bbnumber != 14)) {  // Close image tag before adding another

 	document.form.nyhet.value += bbtags[15];

 	lastValue = arraypop(bbcode) - 1;	// Remove the close image tag from the list

 	document.form.addbbcode14.value = "Img";	// Return button back to normal state

 	imageTag = false;

 }



 // Open tag

 document.form.nyhet.value += bbtags[bbnumber];

 if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag

 arraypush(bbcode,bbnumber+1);

 eval('document.form.addbbcode'+bbnumber+'.value += "*"');

 document.form

.nyhet.focus();

 return;

}

storeCaret(document.form

.nyhet);

}



// Insert at Claret position. Code from

// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130

function storeCaret(textEl) {

if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();

}



//-->

</script>

 	<script type="text/javascript">

<!--

// Insert at Claret position. Code from

// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130

function emoticon(text) {

text = ' ' + text + ' ';

if (document.form.nyhet.createTextRange && document.form.nyhet.caretPos) {

 var caretPos = document.form.nyhet.caretPos;

 caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;

 document.form.nyhet.focus();

} else {

document.form.nyhet.value  += text;

document.form.nyhet.focus();

}

}



function storeCaret(textEl) {

if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();

}

//-->



</script>

 	<input type="button" class="button" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" onmouseover="helpline('b')" /> 

 

<input type="button" class="button" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" 

onclick="bbstyle(2)" onmouseover="helpline('i')" /> 

 

<input type="button" class="button" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; 

width: 30px" onclick="bbstyle(4)" onmouseover="helpline('u')" /> 

 

<a href="javascript:bbstyle(-1)" onmouseover="helpline('a')">Lukk tagger</a>

 	<p><textarea class="box" cols="54" rows="16" name="nyhet" id="nyhet" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);"></textarea></p>

 	<p><input type="text" name="helpbox" size="46" class="helpline" value="Teksten kan formateres ved enkle grep :-)" maxlength="44" /></p>

 </form>

 

Share this post


Link to post

Hva med å linke eksternt til så store kode-snutter som dette?

 

For det første er det få som egentlig har interesse av å lese spaltemetere med kildekode (jeg scroller hvertfall kjapt forbi) og forumets relativt smale sideoppsett egner seg dårlig.

Share this post


Link to post

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.   Paste as plain text instead

  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.

Loading...
Sign in to follow this  

×
×
  • Create New...