YABB-Code ähnliche "Tags"

  • #1
M

Michael_B

Bekanntes Mitglied
Themenersteller
Dabei seit
21.09.2002
Beiträge
860
Reaktionspunkte
0
Ort
Köln
Juten Tach,

ich bastele gerade an einem kleinen Redaktionssystem, mit dem wahrhafte Internet-Noobs Texte schreiben und direkt online schicken können.
Dazu wollte ich YABB-ähnliche Codes verwenden. Beispielsweise [f]text[/f] um text fett auszugeben.

Ich brauche nun möglichst eine einfache Methode um genau den String herauszuholen, der sich zwischen den Tags befindet. Im obigen Falle also eine Methode die mir von dem String [f]text[/f] das text herausholt.

Kennt da jemand was...?

Ich weiss ich weiss, es gibt jede Menge Infos im Netz, aber meine Lieblingsseite diesbezüglich ist offensichtlich gerade down und auf anderen Seiten find ich mich nicht so gut zurecht.

Bin für jede Hilfe dankbar - wie immer :)
 
  • #2
Hallo Michael_B,

ich habe zwar keine Ahnung davon, aber eventuell könntest du ja mal einen WinTotal Forum-Admin fragen - die müssten das doch wissen, oder?
Unten auf der Hauptseite steht nämlich YaBB SE Statistiken.

.. Sahne
 
  • #3
Wenn dann würd Björn fragen, da er das Board mitentwickelt! :D
Wobei er bestimmt besseres zu tun hat. :-\
 
  • #4
Ich hoffe, einer der Admins liest sich diesen Thread durch. Aber nerven (z. B. mit einer KM oder Mail) will ich die nicht. Ham so schon zuviel am Hals.

Frage: Ist Björn Mitglied im YaBB Developer Team?
 
  • #9
da kann ich mich nur anschließen...
WOW

;)
 
  • #10
Speicher dir das am besten als Funktion ab
Code:
// Ermöglicht UBB-Code, (c) by Karl Förster ([email protected])
class myBoardCodeTag {
  var $str_search;
  var $str_replace;
        var $casesensitiv;

  function myBoardCodeTag ($search, $replace, $casesensitiv = false) {
    $this->str_search     = $search;
    $this->str_replace    = $replace;
                $this->casesensitiv   = $casesensitiv;
  }
}


function Filter_myBoardCodeTags ($text, $myBoardCodeTags, $drophtmltags = false) {
  if (isset ($text)) {
    $s = $text;
                if ($drophtmltags) {
                        $s = strip_tags ($s);
                }
    for ($i = 0; $i < Count ($myBoardCodeTags); $i++) {
                        $pattern = = . $myBoardCodeTags[$i]->str_search . =sU;
                        if (!$myBoardCodeTags[$i]->casesensitiv) { $pattern .= i; }
      $s = preg_replace ($pattern, $myBoardCodeTags[$i]->str_replace, $s);
    }
    $s = nl2br ($s);
    $s = stripslashes ($s);
    return $s;
  }
  return $text;
}


Hier kannst du deine eigenen Tags defenieren. Ich empfehle dir die bestehenden nur zu ändern :)
Code:
$bold        =new myBoardCodeTag((\[b\])(.*)(\[/b\]), <b>\\2</b>); 
$italic        =new myBoardCodeTag((\[i\])(.*)(\[/i\]), <i>\\2</i>); $underline=new myBoardCodeTag((\[u\])(.*)(\[/u\]), <u>\\2</u>);
$quote      =new myBoardCodeTag((\[quote\])(.*)(\[/quote\]), <blockquote>Zitat:<hr>\\2<hr></blockquote>);
$img=new myBoardCodeTag((\[img])(.*)(\[/img\]), <img src=\\\2\ border=\0\>); 
$color       =new myBoardCodeTag((\[color\=)(.*)(\])(.*)(\[/color\]), <font color=\\\2\>\\4</font>); 
$size     =new myBoardCodeTag((\[size\=)(.*)(\])(.*)(\[/size\]), <font size=\\\2\>\\4</font>);
enthält alle defenierten tags:
Code:
$myBoardCodeTags = array ($bold,$italic,$quote,$img,$size,$color);

Einen Text umwandeln:
Code:
$text=Filter_myBoardCodeTags($text, $myBoardCodeTags);


das wars erstmal. Falls benötigt kann ich dir auch noch ein javascript sowie ein Formular geben in dem alle gebotenen Möglichkeiten sehr eifnach zum textfeld hinzugefügt werden können - ähnlich wie bei wintotal....
xeen
 
  • #11
Das funktioniert ja schonmal super. DANKE !!!!! :D

Ein kleines Problem bezüglich der Bilder hab ich aber noch:
Es soll für jedes Bild 2 Quellen angegeben werden. Einmal den Dateinamen des Bildes (das in meinem Fall immer ein Thumbnail ist) und einmal den Dateinamen des Bildes, das durch Klick auf das Thumbnail geöffnet werden soll.
Außerdem sollen noch angaben für Ausrichtung (links- oder rechtsbündig) und ein Titel (für das alt-Attribut bzw. für den Titel des neuen Fensters in dem das richtige Bild angezeigt wird) rein.

Ein [ img] soll also 4 Attribute aufnehmen:
src (Dateiname des Thumbnails) - steht ja zw. [ img] und [ /img]
trgtsrc (Dateiname des richtigen Bildes)
align (Ausrichtung) und
titel (für das alt-Attribut im HTML IMG-Tag)

Soll also in etwa so aussehen:
[ img trgtsrc=bild.jpg align=right titel=Der Titel des Bildes]bild_thumb.jpg[ /img]

und herauskommen sollte dann so was:
<a href=javascript:eek:effnen('view.php?bild=bild.jpg&titel=Der%20Titel%20des%20Bildes')><img src=bild_thumb.jpg align=right alt=Der Titel des Bildes></a>

Ich hoffe es ist klar, was ich damit meine... :-\

P. S.: Ich merke gerade, dass das mit dem Codieren der Leerzeichen (%20) auch noch ein kleines Problem geben wird. Das alt-Attribut schreibt die %20 einfach aus, aber in einer URL muss ich doch die Leerzeichen kodieren, oder?

edit: An den Formularen und JS-Funktionen zum Einfügen dieser Tags wäre ich auch sehr interessiert... ::)
 
  • #12
Leerzeichen in html funktioniert so:   oder  


Code:
$img=new myBoardCodeTag((\[img])(.*)(\[/img\]), <a href=\javascript:oeffnen('view.php?bild=\\2&titel=\\6')><img src=\\\8\ align=\\\4\ alt=\\\6\></a>);

Ich bin kein Experte in Regex und habe diese Funktion auch nicht getestet.
Ich Rate dir dringends davon ab so komplizierte Tags zu verwenden. Yabb-Codes sollen eigentlich die Benutzung erleichtern für Non-HTML leute... aber das ist ziemlich kompliziert. Außerdem muss bei der Eingabe die Reiehnfolge beachtet werden - wird Titel und URL vertauscht ist die URL des Bildes auf einmal der Titel. (deswegen müssen auch alle angegben werden
Ich empfehle dir statt dessen mit preg_replace den img tag umzuändert, danach den Befehl strip_tags anzuwenden und den img befehl wiederherzustellen - genauso mit allen anderen Befehlen.
Die Eingabe erfolgt so:

oder ersteze die \| durch ein leerzeichen was ich nicht empfehle... denn ich glaube das die Leerzeichen auch als solche anerkannt werden was zu falschen trennungen führt.
Falls du ohne diese Komplizierten Funktionen leben kannst, hier das Formular:
Code:
<form action= method=post name=post>
<INPUT class=button onmouseover=helpline('b') onmouseout=helpline('n')
 style=FONT-WEIGHT: bold; WIDTH: 29px accessKey=b onclick=bbstyle(0) type=button value= b  name=addbbcode0 style=.button> 
<INPUT class=button onmouseover=helpline('i') onmouseout=helpline('n')
 style=WIDTH: 29px; FONT-STYLE: italic accessKey=i onclick=bbstyle(2) type=button value= i  name=addbbcode2> 
<INPUT class=button onmouseover=helpline('u') onmouseout=helpline('n')
 style=WIDTH: 29px; TEXT-DECORATION: underline accessKey=u onclick=bbstyle(4) type=button value=u name=addbbcode4> 
<INPUT class=button  onmouseover=helpline('q')
 onmouseout=helpline('n') style=WIDTH: 49px accessKey=q onclick=bbstyle(6) type=button value=Quote name=addbbcode6> 
<INPUT class=button onmouseover=helpline('p') onmouseout=helpline('n')
 style=WIDTH: 39px accessKey=p onclick=bbstyle(14) type=button value=Img name=addbbcode14> 
<A onmouseover=helpline('a') onmouseout=helpline('n')
 href=javascript:bbstyle(-1)>Tags schließen</A><br>
<A href=javascript:emoticon(':)')><IMG title=Smiley alt=Smiley src=../icons/smiley.gif border=0></a>
<A href=javascript:emoticon(';)') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Zwinkernd alt=Zwinkernd src=../icons/wink.gif border=0></a>
<A href=javascript:emoticon(':D') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Lächelnd alt=Lächelnd src=../icons/cheesy.gif border=0></a>
<A href=javascript:emoticon(';D') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Grinsend alt=Grinsend src=../icons/grin.gif border=0></a>
<A href=javascript:emoticon('>:(') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Ärgerlich alt=Ärgerlich src=../icons/angry.gif border=0></a>
<A href=javascript:emoticon(':(') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Traurig alt=Traurig src=../icons/sad.gif border=0></a>
<A href=javascript:emoticon(':o') onMouseOver=helpline('x') onmouseout=helpline('n')><IMG title=Schockiert alt=Schockiert src=../icons/shocked.gif border=0></a>
<A href=javascript:emoticon('8)') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Cool alt=Cool src=../icons/cool.gif border=0></a>
<A href=javascript:emoticon('???') onMouseOver=helpline('x') 
onmouseout=helpline('n')><IMG title=Huch alt=Huch src=../icons/huh.gif border=0></a>
<A href=javascript:emoticon('::)') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Augen rollen alt=Augen rollen src=../icons/rolleyes.gif border=0></a>
<A href=javascript:emoticon(':P') onMouseOver=helpline('x') onmouseout=helpline('n')><IMG title=Zunge alt=Zunge src=../icons/tongue.gif border=0></a>
<A href=javascript:emoticon(':-[') onMouseOver=helpline('x') 
onmouseout=helpline('n')><IMG title=Verlegen alt=Verlegen src=../icons/embarassed.gif border=0></a>
<A href=javascript:emoticon(':-X') onMouseOver=helpline('x') 
onmouseout=helpline('n')><IMG title=Lippen versiegelt alt=Lippen versiegelt src=../icons/lipsrsealed.gif border=0></a>
<A href=javascript:emoticon(':-\\') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Unentschlossen alt=Unentschlossen src=../icons/undecided.gif border=0></a>
<A href=javascript:emoticon(':-*') onMouseOver=helpline('x')
><IMG title=Küsschen alt=Küsschen src=../icons/kiss.gif border=0></a>
<A href=javascript:emoticon(':\'(') onMouseOver=helpline('x')
 onmouseout=helpline('n')><IMG title=Weinen alt=Weinen src=../icons/cry.gif border=0></a>
<br><textarea onclick=storeCaret(this); onselect=storeCaret(this); name=comment cols=36 rows=12></textarea><br>
<INPUT maxLength=100 size=48 value=Sie können Styles zum markierten Text hinzufügen name=helpbox readonly class=eingabefeld><br>

<select name=addbbcode18 style=width=151px; onChange=bbfontstyle('[color=' + this.form.addbbcode18.options[this.form.addbbcode18.selectedIndex].value +->]',->[/color]');this.selectedIndex=0; onMouseOver=helpline('s') onmouseout=helpline('n')>
<!-- ACHTUNG!!! ändere die Ersten beiden farben in eine Farbe die ungleich dme Hintergrund ist! -->
<option style=color:white selected>Schriftfarbe  </option>
<option style=color:white value=white class=genmed>Standard</option>
<option style=color:darkred value=darkred class=genmed>Dunkelrot</option>
<option style=color:red value=red class=genmed>Rot</option>
<option style=color:orange value=orange class=genmed>Orange</option>
<option style=color:brown value=brown class=genmed>Braun</option>
<option style=color:yellow value=yellow class=genmed>Gelb</option>
<option style=color:green value=green class=genmed>Grün</option>
<option style=color:olive value=olive class=genmed>Oliv</option>
<option style=color:cyan value=cyan class=genmed>Cyan</option>
<option style=color:blue value=blue class=genmed>Blau</option>
<option style=color:darkblue value=darkblue class=genmed>Dunkelblau</option>
<option style=color:indigo value=indigo class=genmed>Indigo</option>
<option style=color:violet value=violet class=genmed>Violett</option>
<option style=color:black value=white class=genmed>Weiß</option>
<option style=color:black value=black class=genmed>Schwarz</option>
</select> 
<select name=addbbcode20 style=width=151px; onChange=bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value +->]',->[/size]') onMouseOver=helpline('f') onmouseout=helpline('n')>
<option selected>Schriftgröße</option>
<option value=7 class=genmed>Winzig</option>
<option value=9 class=genmed>Klein</option>
<option value=12 class=genmed>Normal</option>
<option value=18 class=genmed>Groß</option>
</select>
</form>

Und hier das entsprechende java script das du am besten per
Code:
<SCRIPT language=JavaScript src=bbc.js type=text/javascript></SCRIPT>
einbindest

achtung: im folgenden code abschnitt musst du KEINCODE durch code ersetzen - ich musste das amchen weils yabb sonst falsch anzeigt
bbc.js:
Code:
// bbCode control by
// subBlue design
// [url]www.subBlue.com[/url]
var imageTag = false;
var theSelection = false;
var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion);
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_moz = 0;
var is_win = ((clientPC.indexOf(win)!=-1) || (clientPC.indexOf(16bit) != -1));
var is_mac = (clientPC.indexOf(mac)!=-1);
b_help = Text in fett: [b]Text[/b]  (alt+b);
x_help = Smiley einfügen;
i_help = Text in kursiv: [i]Text[/i]  (alt+i);
u_help = Unterstrichener Text: [u]Text[/u]  (alt+u);
q_help = Zitat: [quote]Text[/quote]  (alt+q);
c_help = Code anzeigen: [KEINCODE]Code[/KEINCODE]  (alt+c);
l_help = Liste: [list]Text[/list] (alt+l);
o_help = Geordnete Liste: [list=]Text[/list]  (alt+o);
p_help = Bild einfügen: [img]http://Bild_URL[/img]  (alt+p);
w_help = URL einfügen: [url]http://URL[/url] oder [url=http://url]URL Text[/url]  (alt+w);
a_help = Alle offenen BBCodes schließen;
s_help = Schriftfarbe: [color=red]Text[/color] ;
f_help = Schriftgröße: [size=x-small]Kleiner Text[/size];
n_help = Sie können Styles zum markierten Text hinzufügen;
bbcode = new Array();
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]',
'[KEINCODE]','[/KEINCODE]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]');
imageTag = false;
function helpline(help) {
        document.post.helpbox.value = eval(help + _help);
}
function getarraysize(thearray) {
        for (i = 0; i < thearray.length; i++) {
                if ((thearray[i] == undefined) || (thearray[i] == ) || (thearray[i] == null))
                        return i;
                }
        return thearray.length;
}
function arraypush(thearray,value) {
        thearray[ getarraysize(thearray) ] = value;
}
function arraypop(thearray) {
        thearraysize = getarraysize(thearray);
        retval = thearray[thearraysize - 1];
        delete thearray[thearraysize - 1];
        return retval;
}


function emoticon(text) {
        var txtarea = document.post.comment;
        text =->-> + text +->->;
        if (txtarea.createTextRange && txtarea.caretPos) {
                var caretPos = txtarea.caretPos;
                //caretPos.text = caretPos.text.charAt(caretPos.text.length + 1) ==->-> ? text +->-> : text;
                txtarea.value  += text;
                txtarea.focus();
        } else {
                txtarea.value  += text;
                txtarea.focus();
        }
}

function bbfontstyle(bbopen, bbclose) {
        var txtarea = document.post.comment;

        if ((clientVer >= 4) && is_ie && is_win) {
                theSelection = document.selection.createRange().text;
                if (!theSelection) {
                        txtarea.value += bbopen + bbclose;
                        txtarea.focus();
                        return;
                }
                document.selection.createRange().text = bbopen + theSelection + bbclose;
                txtarea.focus();
                return;
        }
        else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
        {
                mozWrap(txtarea, bbopen, bbclose);
                return;
        }
        else
        {
                txtarea.value += bbopen + bbclose;
                txtarea.focus();
        }
        storeCaret(txtarea);
}


function bbstyle(bbnumber) {
        var txtarea = document.post.comment;

        donotinsert = false;
        theSelection = false;
        bblast = 0;

        if (bbnumber == -1) { // Close all open tags & default button names
                while (bbcode[0]) {
                        butnumber = arraypop(bbcode) - 1;
                        txtarea.value += bbtags[butnumber + 1];
                        buttext = eval('document.post.addbbcode' + butnumber +->.value');
                        eval('document.post.addbbcode' + butnumber +->.value =' + buttext.substr(0,(buttext.length - 1)) +->');
                }
                imageTag = false; // All tags are closed including image tags :D
                txtarea.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];
                        txtarea.focus();
                        theSelection =->';
                        return;
                }
        }
        else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
        {
                mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
                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;
                                txtarea.value += bbtags[butnumber + 1];
                                buttext = eval('document.post.addbbcode' + butnumber +->.value');
                                eval('document.post.addbbcode' + butnumber +->.value =' + buttext.substr(0,(buttext.length - 1)) +->');
                                imageTag = false;
                        }
                        txtarea.focus();
                        return;
        } else { // Open tags

                if (imageTag && (bbnumber != 14)) {                // Close image tag before adding another
                        txtarea.value += bbtags[15];
                        lastValue = arraypop(bbcode) - 1;        // Remove the close image tag from the list
                        document.post.addbbcode14.value = Img;        // Return button back to normal state
                        imageTag = false;
                }

                // Open tag
                txtarea.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.post.addbbcode'+bbnumber+'.value += *');
                txtarea.focus();
                return;
        }
        storeCaret(txtarea);
}

// From [url]http://www.massless.org/mozedit/[/url]
function mozWrap(txtarea, open, close)
{
        var selLength = txtarea.textLength;
        var selStart = txtarea.selectionStart;
        var selEnd = txtarea.selectionEnd;
        if (selEnd == 1 || selEnd == 2)
                selEnd = selLength;

        var s1 = (txtarea.value).substring(0,selStart);
        var s2 = (txtarea.value).substring(selStart, selEnd)
        var s3 = (txtarea.value).substring(selEnd, selLength);
        txtarea.value = s1 + open + s2 + close + s3;
        return;
}

// Insert at Claret position. Code from
// [url]http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130[/url]
function storeCaret(textEl) {
        if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

xeen
 
  • #13
xeen schrieb:
Ich Rate dir dringends davon ab so komplizierte Tags zu verwenden. Yabb-Codes sollen eigentlich die Benutzung erleichtern für Non-HTML leute... aber das ist ziemlich kompliziert. Außerdem muss bei der Eingabe die Reiehnfolge beachtet werden - wird Titel und URL vertauscht ist die URL des Bildes auf einmal der Titel. (deswegen müssen auch alle angegben werden

Dass es komplizierter wird, ist natürlich klar. Aber da hatte ich mir das dann so überlegt, dass das Formular etwas erweitert wird. Der User kann dann in 3 Text-INPUTs Thumbnail-Name, Bild-Name und Titel eingeben, in einem RADIO die ausrichtung auswählen und dann per Klick den YABB-Code in das Textfenster einbauen lassen. Das wäre dann IMHO ganz okay für die User.

Was meinst du dazu?

P. S.: Ich denke, das Formular bzw. JavaScript, das ich von dir bekommen habe, werde ich dann auch soweit erweitern können... :D
 
  • #14
Hi

Wenn du dafür eh ein Formular nimmst, warum dann der Umweg über UBB Tags?
Kannst doch direkt den HTML Code einfügen und dann die nicht erlaubten Tags auch rausfiltern lassen.

Gruß, Michael
 
  • #16
ich teile reitzis ansicht.
Du kannst per java Script solche Meldungen aufpoppen lassen und dann ins Textfeld einfügen. aber dann brauchst du keine Ubb Tags. Verwende normale HTML tags, wandle diese um wende strip_tags(); an und wandle diese wieder zurück. vorallem ist es für leute die html sowieso schon können eine erleichterung...
 
  • #17
ich habs auch so geschafft. ;D :D 8)

mit
Code:
$image = new myBoardCodeTag((\[image\=)(.*)(thumb\=)(.*)(align\=)(.*)(titel\=)(.*)(\]),<a href=\javascript:oeffnen('view.php?bild=\\2&titel=\\8')\><img src=\imgs/\\4\ width=\120\ height=\120\ align=\\\6\ hspace=\3\ vspace=\3\ alt=\\\8\ border=\0\></a>);
erzeuge ich die Instanz, und mit
Code:
[image=bild001.jpgthumb=bild001m.jpgalign=righttitel=X-beliebiger Titel]
wird das Bild samt Thumbnail, Ausrichtung und Titel definiert.

Ich dachte ja zuerst, dass leerzeichen innerhalb einer URL, wie bei dem Wert für titel in
Code:
javascript:oeffnen('view.php?bild=einbild.jpg&titel=Ein Titel')
                                                       ^^^
in ein %20 kodiert werden müssten. Muss aber nicht! Leerzeichen sind offensichtlich auch okay. Allerdings habe ich das noch nicht weit genug ausgetestet (versch. Browser etc.) aber beim IE funzt es.

Was auch irgendwie schlecht ist - geb ich ehrlich zu - ... dass in
Code:
[image=bild001.jpgthumb=bild001m.jpgalign=righttitel=X-beliebiger Titel]
die Attributwerte direkt an den folgenden Attributnamen hängen. Das scheint aber kein problem zu sein, da keines der Attributwerte ein = enthalten wird. Zumindest wäre ein = sehr sinnlos.

Ich denke, wenn ich es mit einem vernünftigen Formular mache, wo man sich diese Image-Tags generieren lassen kann, dann werden die Jungs von der Redaktion das schon schaffen.

Wenn ihr euch das mal anschauen wollt...

der Text ist natürlich sehr sinnlos formatiert. Ist halt nur ein Test, aber soweit funktioniert es ja.

Ich bin jedenfalls sehr stolz auf mich ::) zumal ich mit Regulären Ausdrücken wirklich so meine Probleme habe.
 
  • #18
deine sache.
zu sicherheit kannst du ja noch einen | zwischen jedes Attribut setzen. Das muss aber escaped werden... sprich:

$image = new myBoardCodeTag((\[image\=)(.*)(\|thumb\=)(.*)(\|align\=)(.*)(\|titel\=)(.*)(\]),<a href=\javascript:eek:effnen('view.php?bild=\\2&titel=\\8')\><img src=\imgs/\\4\ width=\120\ height=\120\ align=\\\6\ hspace=\3\ vspace=\3\ alt=\\\8\ border=\0\></a>);

dann wird die Anzeige im Formularfeld für die User besser lesbar...
Oder findest du...
[image=http://www.wintotal-forum.de/graphics/jpg/big/0001.jpgthumb=http://www.wintotal-forum.de/graphics/jpg/small/0001_small.jpgalign=righttitel=Bild 0001 von der Wintotal Forums Icon Gallerie]
...lesbar?
 
  • #19
Nein... lesbar finde ich das natürlich nicht. Hab ja auch gesagt, das das schlecht ist. Das mit der | habich versucht, aber ohne sie zu escapen... werd ich nachher auch mal ausprobieren.

Aber vielen vielen Dank für eure Mühe ;)
 
  • #20
@Michael_B:

Schreibst Du dein Tool in PHP?

Falls ja kann ich Dir folgende Lösung anbieten (ich hab diese Teile META-Tags genannt):

1. Umwandlung von META in HTML:
Code:
/*
+---------------------------------------------------------------------------+
|META-Tags (ml=Meta-Language) in HTML konvertieren.                         |
+---------------------------------------------------------------------------+
|Folgende ml-Tags werden nach HTML konvertiert
|URL:
|  von:  [URL=http://www.google.de]Google[/URL]
|  nach: <a href=[url]http://www.google.de>Google</a>[/url]
|  von:  [URL=http://www.google.de]Google[/URL]
|  nach: <a href=[url]http://www.google.de>Google</a>[/url]
|IMAGES:
|  von:  [img]
|  nach: <img src=image/star.bmp alt=image/star.bmp>
|  von:  [img]image/star.bmp[/IMG]
|  nach: <img src=image/star.bmp alt=image/star.bmp>
|BOLD:
|  von:  [B]
|  nach: <b>
|  von:  [/B]
|  nach: </b>
|ITALIC:
|  von:  [I]
|  nach: <i>
|  von:  [/I]
|  nach: </i>
|UNDERLINDED:
|  von:  [U]
|  nach: <u>
|  von:  [/U]
|  nach: </u>
|COLOR:
|  von:  [COLOR=red]
|  nach: <font color=red>
|  von:  [COLOR=red]
|  nach: <font color=red>
|  von:  [/COLOR]
|  nach: </font>
|SIZE:
|  von:  [SIZE=2]
|  nach: <font size=2>
|  von:  [SIZE=2]
|  nach: <font size=2>
|  von:  [/SIZE]
|  nach: </font>
|QUOTE
|  von:  [QUOTE=name]
|  nach: <blockquote><font face=arial size=2><b>name</b></font> 
|        <font face=arial size=1>schrieb:</font><hr><br />
|  von:  [quote][/QUOTE]
|  nach  <hr></blockquote><br />
+---------------------------------------------------------------------------+
*/
function META_HTML() {
  global $CONFIGURE;
  // URL
  $this->text = $this->yv_preg_replace('/\[URL\=\([^\]*)\\]([^\[]*)\[\/URL\]/i' ,'<a href=$1>$2</a>',$this->text);
  $this->text = $this->yv_preg_replace('/\[URL\=([^\]]*)\]([^\[]*)\[\/URL\]/i' ,'<a href=$1>$2</a>',$this->text);
  // IMG
  $this->text = $this->yv_preg_replace('/\[img]([^]]*)\[\/IMG\]/i','<img src=$1 alt=$1>',$this->text);
  $this->text = $this->yv_preg_replace('/\[img]*)\]/i','<img src=$1 alt=$1>',$this->text);

  // Bold
  $this->text = $this->yv_preg_replace('/\[B\]/i',-><b>' ,$this->text);
  $this->text = $this->yv_preg_replace('/\[\/B\]/i',-></b>' ,$this->text);
  // Italic
  $this->text = $this->yv_preg_replace('/\[I\]/i',-><i>' ,$this->text);
  $this->text = $this->yv_preg_replace('/\[\/I\]/i',-></i>' ,$this->text);
  // Underlined
  $this->text = $this->yv_preg_replace('/\[U\]/i',-><u>' ,$this->text);
  $this->text = $this->yv_preg_replace('/\[\/U\]/i',-></u>' ,$this->text);

  // Font-Color
  $this->text = $this->yv_preg_replace('/\[COLOR\=\([^\]*)\\]/i',-><font color=$1>',$this->text);
  $this->text = $this->yv_preg_replace('/\[\/COLOR]/i',-></font>',$this->text);
  $this->text = $this->yv_preg_replace('/\[COLOR\=([^\]]*)\]/i',-><font color=$1>',$this->text);

  // Font-Size
  $this->text = $this->yv_preg_replace('/\[SIZE\=\([^\]*)\\]/i',-><font size=$1>',$this->text);
  $this->text = $this->yv_preg_replace('/\[\/SIZE]/i',-></font>',$this->text);
  $this->text = $this->yv_preg_replace('/\[SIZE\=([^\]]*)\]/i',-><font color=$1>',$this->text);

  // Quote
  $this->text = $this->yv_preg_replace('/\[QUOTE\=([^\]]*)\]/i',
   -><blockquote><font face='.$CONFIGURE['font'].' size=2><b>$1</b></font> '
    .'<font face='.$CONFIGURE['font'].' size=1>'.$CONFIGURE['quote'].'</font><hr><br />',
    $this->text);
  $this->text = $this->yv_preg_replace('/\[QUOTE\]/i',
   -><blockquote><font face='.$CONFIGURE['font'].' size=2>'
    .'<b>'.$CONFIGURE['quote-unknown'].'</b></font><hr><br />',
    $this->text);

  $this->text = preg_replace('/\[\/QUOTE\]/i','<hr></blockquote><br />',$this->text);

return $this->text;
}

Umwandlung zurück (HTML nach META):
Code:
function HTML_META() {
  global $CONFIGURE;
  
  // Quote
  // Beachte: Quote-Umsetzung muss vor BOLD und allen Font (COLOR und SIZE)
  //          erfolgen, da ansonsten das Suchmuster nicht meht passt
  //          (<b>-Bold Tag und <font>-Tag sind in <blockquote> enthalten)
  $this->text = $this->yv_preg_replace('/<hr><\/blockquote><br \/>/i','[quote][/QUOTE]',$this->text);

  $this->text = $this->yv_preg_replace('/<blockquote><font face='.$CONFIGURE['font'].' size=2>'
    .'<b>([^>]*)<\/b><\/font> <font face='.$CONFIGURE['font'].' size=1>'
    .$CONFIGURE['quote'].'<\/font><hr><br \/>/i',
   ->[QUOTE=$1]',$this->text);

  // Color and Size
  $this->text = $this->replaceFontdata();

  // Bold
  $this->text = $this->yv_preg_replace('/<b>/i',->[B]' ,$this->text);
  $this->text = $this->yv_preg_replace('/<\/b>/i',->[/B]' ,$this->text);
  // Italic
  $this->text = $this->yv_preg_replace('/<i>/i',->[I]' ,$this->text);
  $this->text = $this->yv_preg_replace('/<\/i>/i',->[/I]' ,$this->text);
  // Underlined
  $this->text = $this->yv_preg_replace('/<u>/i',->[U]' ,$this->text);
  $this->text = $this->yv_preg_replace('/<\/u>/i',->[/U]' ,$this->text);

  // Image
  $this->text  = $this->yv_preg_replace('/<img src\=\([^\]*)\>/i',->[img]$1[/IMG]', $this->text);
  $this->text  = $this->yv_preg_replace('/<img src\=\([^\]*)\ alt\=\([^\]*)\>/i',->[img]$1[/IMG]', $this->text);

  //URL
  $this->text = $this->yv_preg_replace('/<a href\=\([^\]*)\>([^<]*)<\/a>/i',->[URL=$1]$2[/URL]', $this->text);

  return $this->text;
}

Und jetzt noch die benötigten Variable CONFIGURE und die function yv_preg_replace:
Code:
$CONFIGURE['font']          =->arial,helvetica';
$CONFIGURE['quote']         =->schrieb:';
$CONFIGURE['quote-unknown'] =->Zitat:';          

function yv_preg_replace($pattern,$replace,$text) {
  $orig = ;
  $i = 0;
  while($orig!=$text && ++$i<10) {
    $orig = $text;
    $text = preg_replace($pattern, $replace,$text);
  }
  return $text;
}

wie du siehst, arbeite ich mit dem $this, d.h. du musst das ganze noch in eine class packen oder ein bisschen umcodieren :)
 
Thema:

YABB-Code ähnliche "Tags"

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.965
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben