Webstatt.org - Community seit 2006 - 2012 (2024?)

php4u bbcodes

Avatar user-180
04.09.2006 16:47

HALLO LIEBE COMMUNITY

ich bin auf der suche nach einer leicht zu ergänzenden bbcodes funktion leider nicht fündig geworden, und versuche mich deshalb an der bbcodesfunktion von php4u.net

und dabei tauchen ein paar probleme auf.

-links wie www.web.de werden nicht umgwandelt wenn sie nach einem abasatz stehen
-verschachtelungen von quote und code funktionieren nicht.
-wie kann ich die variablen für den text (zb \\1) umbenennen in $text_1 $text_2 oder wenn dass nicht geht $1 , $2 etc
wie kann ich diese probleme lösen

may the force be with you. but mostly with me.
Avatar user-180
04.09.2006 17:30

KEINER ??(

may the force be with you. but mostly with me.
user-157
04.09.2006 17:35

btw: fehler im design?

was meinst du mit nach nem absatz?

asdf!
Avatar user-180
04.09.2006 17:39

http://fish.bierquartier.de/test/php4u/test.php
hier kanste das testen.. gib mal das ein dann siehst du was ich meine...


www.web.de irgendeintesttexttext http://www.web.de
www.web.de

absatz

www.web.de

may the force be with you. but mostly with me.
Avatar user-325
04.09.2006 17:41

Da greift das Suchmuster wohl nur auf die erste Zeile zu. Versuchs mal mit dem s-Modifier (\s).

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Avatar user-180
04.09.2006 17:43

err wo genau im code soll ich den denn anwenden?

may the force be with you. but mostly with me.
Avatar user-180
04.09.2006 18:50

habe den code ein wenig umgebaut und "si" eingefügt an den sntsprechenden stellen.

if($url) {
$text = preg_replace('"(|^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si','\\1<a href="http://\2" target="_blank">\\2</a>', $text);
$text = preg_replace('"(|^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
'\\1<a href="http://\2" target="_blank">\\2</a>', $text);
$text = preg_replace('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})"si',
'<a href="mailto:\1">\\1</a>', $text);
}


funktionieren tut es leider immer noch nicht. woran kann es liegen

may the force be with you. but mostly with me.
Avatar user-325
05.09.2006 16:59

Ich kenne mich da ehrlich gesagt auch nicht so gut mit aus. user-251el sollte dir aber dabei helfen können :rolleyes:

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Avatar user-180
05.09.2006 17:05

kann er zu diesem thema leider nicht zwinkern

oder meisntu micha?

may the force be with you. but mostly with me.
Avatar user-253
05.09.2006 17:52

Wie in ICQ gesagt bei mir klappen die preg_replace mit si und ohne das Leerzeichen am Anfang (also nun mit (|^)) einwandfrei.

Ich kann den Fehler einfach nicht nachvollziehen traurig

Avatar user-255
05.09.2006 18:00

Hab auch mal etwas rumgespielt.. zwinkern

$text = preg_replace_callback(
'"(\w+://)?(\w*\.?\w+\.\w+/?\S*)"',
create_function(
'$m',
'return \'<a href="\'.(strlen($m[1])?$m[1]:"http://"zwinkern.$m[2].\'">\'.$m[1].$m[2].\'</a>\';'
),
$text
);

Callback musste leider sein -- dafür werden verschiedene Protokolle und protokolllose URLs erkannt

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-180
05.09.2006 19:05

hmm

also sieht schon besser aus. aber die ausgabe ist dann jetzt so..
<a href="http://www.web.de<br">www.web.de<br</a> />

may the force be with you. but mostly with me.
Avatar user-255
05.09.2006 19:19

Hinter der URL muss ein Leerzeichen oder Zeilenumbruch stehen, also nl2br erst danach anwenden

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-180
05.09.2006 19:49

danke!, damit hätten wir teil eins meiner frage geklärt. teil zwei und drei sind aber immer noch offen: wie kann ich quallcode und quoten beliebig oft ineinanderverschgachteln und wie kann ich die verwirrenden variablen umbenennen

may the force be with you. but mostly with me.
Avatar user-182
05.09.2006 20:34

verwirrende variablen?

ich glaube ich würde an deiner stelle einfach die wbb-parseclass ändern und nehmen...

Seid ihr auch schon wix'r? xD
Avatar user-271
06.09.2006 13:47

wenn du verschachtelte sachen haben willst...das ist ein bisschen aufwendiger zwinkern

vom wbb würde ich es nicht nehmen zwinkern aber schau dir mal phpBB an, dass kannste ja weiterverwenden ist ja openSource.

wie es recht einfach geht:
$text = str_replace('[ quote ]','<div class="quote"><p>',$text);
$text = str_replace('[/ quote ]','</p></div>,$text'zwinkern;


das sollte eigenltich auch verschachtelte bearbeiten zwinkern....aber wenn mal der schluss vergessen wurde, dann zerhauts das ganze..das könnte man ja noch abfangen, indem man beide zählt, wieviele vorkommen

#!/bin/bash
traurig){ neutral:& };:
Avatar user-180
06.09.2006 15:37

schön, kannst du mir auch erklären wie ich das mit dem zählen mache?

may the force be with you. but mostly with me.
Avatar user-180
07.09.2006 16:30

weiss keiner wie das geht?

may the force be with you. but mostly with me.
Avatar user-180
10.09.2006 08:35

schadetraurig

may the force be with you. but mostly with me.
Avatar user-180
10.09.2006 16:53

na schön, dann eine andere frega: warum kann ich den URL-Tag nicht mehr benutzen und einem link einen anderen namen zuweisen?

http://fish.bierquartier.de/test/php4u/test.php

LIES HIER ÜBERHAUPT NOCH JEMAND?

may the force be with you. but mostly with me.
Avatar user-255
10.09.2006 18:19

Sry.. :O

Welche Modifikation is das denn jetz genau? Mein URL-Algo is das auf jeden Fall nicht.. zwinkern

Ein Stückchen Pseudocode zur Verschachtelungs-Analyse:

Solange zu ersetzende Elemente existieren
> Erstes öffnendes Element finden, Position speichern
> Weitersuchen
> > Wenn weitere öffnende Elemente desselben Typs gefunden werden, diese beginnen zu zählen
> > Wenn weitere schließende Elemente desselben Typs gefunden werden, den Zählerstand runtersetzen
> Sobald der Zähler auf Null ist, wurde dasentsprechende schließende Element zu obigem ersten gefunden
> Den ganzen Krempel nun ersetzen

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-180
10.09.2006 18:32

danke.
hm also gut hier poste ich mal den code, dann kann mir vll jemand sagen,
wo das URL problem liegt.
<?php
function no_spam($mail)
{
$str = "";
$a = unpack("C*", $mail[1]);
foreach ($a as $b)
$str .= sprintf("%%%X", $b);
$mail[1] = str_replace(".", " [punkt] ", $mail[1]);
$link = str_replace("@", " [ät] ", $mail[1]);

return "<a href=\"mailto:".$str."\">".$link."</a>";
}

function bbcode($text, $url = TRUE, $bb = TRUE) {
/********************************************************************
*
* Autor: user-251el Müller, 30.07.2003, 17:55
*
* $url -> TRUE, wenn URls automatisch umgewandelt werden sollen
* $bb -> TRUE, wenn BB-Code umgewandelt werden soll
*
* Erklärung:
* werden zu <b> und </b>
* werden zu <i> und </i>
* werden zu <u> und </u>
*
werden zu <ul> und </ul>
*
werden zu <ol type="a"> und </ol>
*
werden zu <ol type="1"> und </ol>
*
*
  • ... wird zu <li>...</li>
  • * wird zu <div align="center"> und </div>
    *
    * wird zu <font color="red"> und </font>
    *
    * wird zu <font size="1"> und </font>
    *
    * werden zu <img src="...">
    *
     
    --> siehe Config
    * [ php] [/ php] --> siehe Config
    *
    --> siehe Config
    * ... wird zu <a href="..." target="_blank">...</a>
    * [email=...]...[/email] wird zu <a href="mailto:...">...</a>
    ********************************************************************/


    # Config #
    $max_l = 100; // maximale Länge eines Wortes
    $lword_replace = "-<br />"; // Lange Wörter werden getrennt durch...

    //Pfad zu den Smilie-Bildern, (mit abschließendem /, also zb "bilder/smilies/"zwinkern:
    $smilie_pfad = "smilies/";

    // Header und Footer beschreiben, wie...
    // der farbige PHP-Code umschlossen wird
    $header_php = '<br/><br/><div>PHP-CODE:<br/><br/><code>';
    $footer_php = '</code></div><br/>';

    // Zitate umschlossen werden
    $header_quote = '<br/><br/><div><i>Zitat:</i><br/>';
    $footer_quote = '</div><br/>';

    // normaler code umschlossen wird
    $header_code = '<br/><br/><div>CODE:<br/><br/><pre>';
    $footer_code = '</pre></div><br/>';
    # Ab hier nichts mehr ändern #

    #####################################################################


    # PHP-Code-Blöcke zwischenspeichern #
    $c = md5(time());
    $pattern = "/\[php\](.*?)\[\/php\]/si";
    preg_match_all ($pattern, $text, $results);
    for($i=0;$i<count($results[1]);$i++) {
    $text = str_replace($results[1][$i], $c.$i.$c, $text);
    }
    # PHP-Code-Blöcke zwischenspeichern #

    # alles, was die Codeblöcke nicht betrifft #
    // zu lange Wörter kürzen
    $text = htmlentities($text);
    $lines = explode("\n", $text);
    $merk = $max_l;
    for($n=0;$n<count($lines);$n++) {
    $words = explode(" ",$lines[$n]);
    $count_w = count($words)-1;
    if($count_w >= 0) {
    for($i=0;$i<=$count_w;$i++) {
    $max_l = $merk;
    $tword = trim($words[$i]);
    $tword = preg_replace("/\[(.*?)\]/si", "", $tword);
    $all = substr_count($tword, "http://"zwinkern + substr_count($tword, "https://"zwinkern + substr_count($tword, "www."zwinkern + substr_count($tword, "ftp://"zwinkern;
    if($all > 0) {
    $max_l = 200;
    }
    if(strlen($tword)>$max_l) {
    $words[$i] = chunk_split($words[$i], $max_l, $lword_replace);
    $length = strlen($words[$i])-5;
    $words[$i] = substr($words[$i],0,$length);
    }
    }
    $lines[$n] = implode(" ", $words);
    } else {
    $lines[$n] = chunk_split($lines[$n], $max_l, $lword_replace);
    }
    }
    $text = implode("\n", $lines);
    //$text = htmlentities($text);


    // URLs umformen
    if($url) {
    $text = preg_replace_callback(
    '"(\w+://)?(\w*\.?\w+\.\w+/?\S*)"',
    create_function(
    '$m',
    'return \'<a href="\'.(strlen($m[1])?$m[1]:"http://"zwinkern.$m[2].\'">\'.$m[1].$m[2].\'</a>\';'
    ),
    $text
    );
    //$text = preg_replace('"((|^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
    // '<a href="\1" target="_blank">\\1</a>', $text);
    //$text = preg_replace('"(|^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
    // '\\1<a href="http://\2" target="_blank">\\2</a>', $text);
    $text = preg_replace_callback('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})"si', 'no_spam', $text);

    }

    // BB-Code
    if($bb) {
    //fetgedruckt
    $text = preg_replace("/\[b\](.*?)\[\/b\]/si",
    "<b>\\1</b>", $text);
    //kursiv
    $text = preg_replace("/\[i\](.*?)\[\/i\]/si",
    "<i>$1</i>", $text);
    //unterstrichen
    $text = preg_replace("/\[u\](.*?)\[\/u\]/si",
    "<u>\\1</u>", $text);
    //liste
    $text = preg_replace("/\[list\](.*?)\[\/list\]/si",
    "<ul>\\1</ul>", $text);
    //listenpunkt
    $text = preg_replace("/\[list=(.*?)\](.*?)\[\/list\]/si",
    "<ol type=\"\\1\">\\2</ol>", $text);
    //listenpunkt
    $text = preg_replace("/\[\*\](.*?)\\n/si",
    "<li>\\1</li>", $text);
    //unterstrichen
    $text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
    "<span class=\"ueberschrift\">\\1</span><br/>", $text);

    //ausrichtung
    $text = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/si",
    "<div align=\"\\1\">\\2</div>", $text);

    //schriftfarbe
    $text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si",
    "<font color=\"\\1\">\\2</font>", $text);
    //schriftgröße
    $text = preg_replace("/\[size=(.*?)\](.*?)\[\/umfliessen\]/si",
    "<font size=\"\\1\">\\2</font>", $text);
    //bild
    $text = preg_replace("/\[img\](.*?)\[\/img\]/si",
    "<img src=\"\\1\" border=\"0\" alt=\"bild\"/>", $text);
    //bild mit alt-tag
    $text = preg_replace("/\[img=(.*?)\](.*?)\[\/img\]/si",
    "<img src=\"\\1\" border=\"0\" alt=\"\\2\"/>", $text);

    //links/rechts umflossen
    $text = preg_replace("/\[umfluss=(.*?)\](.*?)\[\/umfluss\]/si",
    "<span class=\"\\1\">\\2</span>", $text);
    //ueberschrift
    $text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
    "<span class=\"h1\">\\1\</span><br/>", $text);
    //codeblock
    $text = preg_replace("/\[code\](.*?)\[\/code\]/si",
    $header_code.'\\1'.$footer_code, $text);
    //link
    $text = preg_replace("/\[url=http:\/\/(.*?)\](.*?)\[\/url\]/si",
    "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text);
    //link mit name
    $text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si",
    "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text);
    //emailadresse
    $text = preg_replace("/\[email](\w+?)@(\w+?)\.(\w+?)\](.*?)\[\/email\]/si",
    '$4 &lt;$1 bei $2 punkt $3&gt;', $text);

    //SMILIES
    //------------------------------------------------------------------------------------------
    //Fettes Grinsen
    $text = preg_replace("/\Fettes Grinsen/si",
    "<img src=\"".$smilie_pfad."grin.gif\" alt=\"*grins*\"/>", $text);
    //Fettes Grinsen
    $text = preg_replace("/\Fettes Grinsen/si",
    "<img src=\"".$smilie_pfad."biggrin.gif\" alt=\"*grins*\"/>", $text);

    //neutral
    $text = preg_replace("/\:\|/si",
    "<img src=\"".$smilie_pfad."worried.gif\" alt=\"*worried*\"/>", $text);

    //zwinkern
    $text = preg_replace("/\;\)/si",
    "<img src=\"".$smilie_pfad."wink.gif\" alt=\"*zwinker*\"/>", $text);

    //frech
    $text = preg_replace("/\frech/si",
    "<img src=\"".$smilie_pfad."tongue.gif\" alt=\"*worried*\"/>", $text);
    //frech
    $text = preg_replace("/\frech/si",
    "<img src=\"".$smilie_pfad."tongue.gif\" alt=\"*worried*\"/>", $text);

    //;P
    $text = preg_replace("/\;P/si",
    "<img src=\"".$smilie_pfad."tongue.gif\" alt=\"*worried*\"/>", $text);

    //o0
    $text = preg_replace("/0o/si",
    "<img src=\"".$smilie_pfad."suspicious.gif\" alt=\"*hmm*\"/>", $text);







    //zitat
    while(preg_match('/\[quote\](.*?)\[\/quote\]/isU', $text)) {
    $text = preg_replace('/\[quote\](.*)\[\/quote\]/si',
    $header_quote.'\\1'.$footer_quote,
    $text);
    }

    }
    # alles, was die Codeblöcke nicht betrifft #

    # PHP-Code-Blöcke umwandeln #
    for($i=0;$i<count($results[1]);$i++) {
    ob_start();
    highlight_string(trim($results[1][$i]));
    $ht = ob_get_contents();
    ob_end_clean();
    $all = $header_php.$ht.$footer_php;
    if(function_exists("str_ireplace"zwinkern) {
    $text = str_replace("[ php]".$c.$i.$c."[/ php]",$all,$text);
    } else {
    $text = str_replace("[ php]".$c.$i.$c."[/ php]",$all,$text);
    $text = str_replace("[php]".$c.$i.$c."[/ php]",$all,$text);
    }
    }
    # PHP-Code-Blöcke umwandeln #

    $text = nl2br($text);
    // Text zurückgeben
    return $text;
    }
    ?>

    may the force be with you. but mostly with me.
    Avatar user-255
    10.09.2006 20:50

    Den Code hättest ruhig kürzen können :S

    Momentan schnappt sich mein RegEx alle URLs, die er/sie/es auftreiben kann, also auch die in BB-URL-Tags.

    Sprich: [ url=foo ]bar[ /url ] wird dann zu [ url=<a href="http://foo">foo</a> ]bar[ /url ]
    .. was dann aber wiederum vom BB-Code Parser weiterverarbeitet wird und letztendlich Müll ergibt.

    Darum:
    $text = preg_replace_callback(
    '"(\w+://)?(\w*\.?\w+\.\w+/?\S*)"',
    create_function(
    '$m',
    'return (in_array($m[1][0], array("=", "]"zwinkern) || in_array($m[2][0], array("=", "]"zwinkern)) ? $m[0] : \'<a href="\'.(strlen($m[1])?$m[1]:"http://"zwinkern.$m[2].\'">\'.$m[1].$m[2].\'</a>\';'
    ),
    $text
    );

    Wenn nun = oder ] vor der URL gefunden wird, wird nix ersetzt.

    ..langsam wird's dirrrty! :-\

    Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
    Avatar user-180
    10.09.2006 23:01

    danke..
    aber da läuft noch ein kleines bischen was schief, dein code frisst das vorherige = zeichen auf, ich muss also (url==www.web.de) eingeben..

    may the force be with you. but mostly with me.
    Avatar user-255
    11.09.2006 08:11

    Jetz aber..

    Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
    Avatar user-180
    11.09.2006 08:26

    cool... jetzt wird aber leider aus www. web.de ww. web.de er frisst ein w in der umwandlung

    may the force be with you. but mostly with me.
    Avatar user-255
    11.09.2006 08:35

    Nochma!

    Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
    Avatar user-180
    11.09.2006 08:41

    <a href="http://<a href="http://www.web.de" target="_blank">link</a>"> ...
    ist jetzt die ausgabe von [ url=www.web.de]link[ /url]

    may the force be with you. but mostly with me.
    Avatar user-255
    11.09.2006 10:04

    Und nu..?
    $text = preg_replace_callback(
    '"(\s)(\w+://)?((\w+\.)?[\w-:;&()@]+?\.\w+/?\S*)"',
    create_function(
    '$m',
    'if ($m[1] != \'\'zwinkern {
    $protokoll = strlen($m[2])?$m[2]:\'http://\';
    $url = $protokoll.$m[3];
    return $m[1].\'<a href="\'.$url.\'">\'.$m[2].$m[3].\'</a>\';
    } else
    return $m[0];'
    ),
    "\n".$text
    );
    $text = trim($text);

    Folgendes hat er bei mir brav "übersetzt":
    webstatt.org
    jabber://doedl@webstatt.org
    webstatt

    <a href="http://webstatt.org">webstatt.org</a>
    <a href="jabber://doedl@webstatt.org">jabber://doedl@webstatt.org</a>
    webstatt

    Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
    Avatar user-180
    11.09.2006 10:14

    DANKE!
    SUPER!

    may the force be with you. but mostly with me.