hallo !
ist die datei defeckt ?
bekomme nur ne weiße seite wenn ich drauf klicke
mfg boss
Gelöst mit nur einem preg_match() für alles Tags (Schleife um die Funktion wird für verschachtelte Tags benötigt) durch Übergabe von Tagname, innerem Text und optionalem Argument an eine Callback-Funktion, die sich um alles übrige kümmert.
Wenig fehleranfällig (BB-Codes werden nur bei Vorhandensein eines entsprechenden Schließen-Tags verarbeitet) und leicht erweiterbar.
Unterstützt in dieser Version:
- Fett
- Kursiv
- Unterstrichen
- Code (dicktengleiche Schrift für Programlistings etc., HTML <pre>-Tag)
- Textfarbe
- eMail-Link
- Bild
- Textgröße
- Zitat (wie hier im Forum)
- URL (normaler Link)
hallo !
ist die datei defeckt ?
bekomme nur ne weiße seite wenn ich drauf klicke
mfg boss
Hallo,
bei mir geht es auch nicht.
mfg. Nico
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
=> http://www.traum-projekt.com/forum/s...984#post473984
Zitat von Robert
OK
Ich kann warten danke schön![]()
Ich wollte deinen Parser erstmal loben, er arbeitet gut und schnell!
Dennoch habe ich eine Frage bezüglich . wie kann ich Listenpunkte erzeugen?
Ich kenne es bisher mit[*] aber das scheint nicht zu funktionieren. Kann mich jemand darüber aufklären?
hier mal die Klasse:
Gruß azooPHP-Code:case 'LIST':
$replacement = '<ul><li>' . $inner_string . '</li></ul>';
break;
Hallo,
ich habe es mit den function gemacht:
mfg. NicoHTML-Code:function bb_code($text, $max_l) { $url = TRUE; $bb = TRUE; /******************************************************************** * * * $url -> TRUE, wenn URls automatisch umgewandelt werden sollen * $bb -> TRUE, wenn BB-Code umgewandelt werden soll * * Erklärung: * [b] [/b] werden zu <b> und </b> * [i] [/i] werden zu <i> und </i> * [u] [/u] werden zu <u> und </u> * [list][/list]werden zu <ul> und </ul> * [list=a][/list]werden zu <ol type="a"> und </ol> * [list=1][/list]werden zu <ol type="1"> und </ol> * *[*]... wird zu <li>...</li> * [align=center] [/align] wird zu <div align="center"> und </div> * * [color=red] [/color] wird zu <font color="red"> und </font> * * [size=1] [/size] wird zu <font size="1"> und </font> * * [img] [/img] werden zu <img src="..."> * [code] [/code] --> siehe Config * [php] [/php] --> siehe Config * [quote] [/quote] --> siehe Config * [url=...]...[/url] wird zu <a href="..." target="_blank">...</a> * [email=...]...[/email] wird zu <a href="mailto:...">...</a> ********************************************************************/ # Config # $lword_replace = "<br/>"; // Lange Wörter werden getrennt durch... // 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://") + substr_count($tword, "https://") + substr_count($tword, "www.") + substr_count($tword, "ftp://"); 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); $text = nl2br($text); // URLs umformen if($url) { $text = preg_replace('"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i', ' <a href="\1" target="_blank">\\1</a>', $text); $text = preg_replace('"( |^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i', '\\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})"i', ' <a href="mailto:\1">\\1</a>', $text); } // BB-Code if($bb) { $text = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $text); $text = preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $text); $text = preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $text); $text = preg_replace("/\[list\](.*?)\[\/list\]/si", "<ul>\\1</ul>", $text); $text = preg_replace("/\[list=(.*?)\](.*?)\[\/list\]/si", "<ol type=\"\\1\">\\2</ol>", $text); $text = preg_replace("/\[\*\](.*?)\\n/si", "<li>\\1</li>", $text); $text = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/si", "<div align=\"\\1\">\\2</div>", $text); $text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si", "<font color=\"\\1\">\\2</font>", $text); $text = preg_replace("/\[size=(.*?)\](.*?)\[\/size\]/si", "<font size=\"\\1\">\\2</font>", $text); $text = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\">", $text); $text = preg_replace("/\[quote\](.*?)\[\/quote\]/si", $header_quote.'\\1'.$footer_quote, $text); $text = preg_replace("/\[code\](.*?)\[\/code\]/si", $header_code.'\\1'.$footer_code, $text); $text = preg_replace("/\[url=http:\/\/(.*?)\](.*?)\[\/url\]/si", "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text); $text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si", "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text); $text = preg_replace("/\[email=(.*?)\](.*?)\[\/email\]/si", "<a href=\"mailto:\\1\">\\2</a>", $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")) { $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 zurückgeben return $text; }
Geändert von schubertmedia (05.04.2006 um 14:12 Uhr)
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
will grade mal deine Funktion testen, wie kann ich sie starten?
ich starte meine bisher so:
Deine F. enthält ja direkt schon 2 Variablen wie ich das sehe!?PHP-Code:bbcode_replace($story['story_text']);
Gruß azoo
Zitat von azoo
Hallo
so kannst Du das machen.
mfg. NicoPHP-Code:echo bb_code($story['story_text'], 'Text_länge_bis_umbruch_in_zweichen_anzahl_angeben');
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
Ja, danke. Ich tat mich schwer mit deiner Zeichen_Anzahl_Angabe. Jetzt klappts.
Erklär mir mal warum du diese Abschneidefunktion drinn hast und was du für einen Zahlenwert gesetzt hast.Text_länge_bis_umbruch_in_zweichen_anzahl_angeben
Was mich auch noch wundert aber erfreut das ich mit deiner function nicht noch zusätzlich die function nl2br()
nutzenmuß die mir hinter jeden Umbruch ein <br /> setzt.
Kannst du mir erklären wieso es bei deiner ohne geht?
Gruß azoo
Geändert von azoo (05.04.2006 um 16:06 Uhr)
Hallo,Zitat von azoo
naja ich setze die Funktion in ein Gästebuch Dienst ein, wo die User selber einstellen können wann der Umbruch gemacht werden soll. Um den richtigen Wert zu finden solltest Du selber ein wenig damit probieren bzw. Testen.
Zu nl2br(), das brauchst Du nicht noch mal verwenden, da diese schon in der Funktion gemacht wird.
mfg. Nico
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
ich war heute mal so frei und habe deine funktion XHTML konform umgeschrieben.
eine weitere klasse "Summary" für große Auszüge z.b. aus der Shell habe ich hinzugefügt.
die <div> 's habe ich rausgeschmissen weil es in tabellenlosen markup nicht so gut ist, durch einen parser zusätzliche DIV'S hinein zu bekommen.
ebenfalls target="blank" musste sich aus validitäts gründen verabschieden.
ein problem gibts noch mit den listen, das kann aber auch an meinem box modell liegen.
falls du interesse hast paste ichs nachher hier rein.
gruß azoo
ps:
paste mir doch bitte mal den javascript insert von "email". laut php parst er [EMAIL=...]...
bei mir flippt er total aus. ohne bbcode auszeichnung also nur azoo@webexil-linux.de gehts ohne probleme.
vieleicht ists auch ein hochkommata problem. ich schaus heute nacht nicht mehr nach..
machs gut bis später....
Geändert von azoo (06.04.2006 um 00:31 Uhr)
Hallo,
jepp, Du hast recht. Bei den Email Code gibt es noch Fehler in der Funktion.
Hier eine kleine änderung, dann sollte es gehen.
mfg. NicoHTML-Code:function bb_code($text, $max_l) { $url = TRUE; $bb = TRUE; /******************************************************************** * * * $url -> TRUE, wenn URls automatisch umgewandelt werden sollen * $bb -> TRUE, wenn BB-Code umgewandelt werden soll * * Erklärung: * [b] [/b] werden zu <b> und </b> * [i] [/i] werden zu <i> und </i> * [u] [/u] werden zu <u> und </u> * [list][/list]werden zu <ul> und </ul> * [list=a][/list]werden zu <ol type="a"> und </ol> * [list=1][/list]werden zu <ol type="1"> und </ol> * *[*]... wird zu <li>...</li> * [align=center] [/align] wird zu <div align="center"> und </div> * * [color=red] [/color] wird zu <font color="red"> und </font> * * [size=1] [/size] wird zu <font size="1"> und </font> * * [img] [/img] werden zu <img src="..."> * [code] [/code] --> siehe Config * [php] [/php] --> siehe Config * [quote] [/quote] --> siehe Config * [url=...]...[/url] wird zu <a href="..." target="_blank">...</a> * [email=...]...[/email] wird zu <a href="mailto:...">...</a> ********************************************************************/ # Config # $lword_replace = "<br/>"; // Lange Wörter werden getrennt durch... // 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://") + substr_count($tword, "https://") + substr_count($tword, "www.") + substr_count($tword, "ftp://"); 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); $text = nl2br($text); // URLs umformen if($url) { $text = preg_replace('"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i', ' <a href="\1" target="_blank">\\1</a>', $text); $text = preg_replace('"( |^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"i', '\\1 <a href="http://\2" target="_blank">\\2</a>', $text); } // BB-Code if($bb) { $text = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $text); $text = preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $text); $text = preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $text); $text = preg_replace("/\[list\](.*?)\[\/list\]/si", "<ul>\\1</ul>", $text); $text = preg_replace("/\[list=(.*?)\](.*?)\[\/list\]/si", "<ol type=\"\\1\">\\2</ol>", $text); $text = preg_replace("/\[\*\](.*?)\\n/si", "<li>\\1</li>", $text); $text = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/si", "<div align=\"\\1\">\\2</div>", $text); $text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si", "<font color=\"\\1\">\\2</font>", $text); $text = preg_replace("/\[size=(.*?)\](.*?)\[\/size\]/si", "<font size=\"\\1\">\\2</font>", $text); $text = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\">", $text); $text = preg_replace("/\[quote\](.*?)\[\/quote\]/si", $header_quote.'\\1'.$footer_quote, $text); $text = preg_replace("/\[code\](.*?)\[\/code\]/si", $header_code.'\\1'.$footer_code, $text); $text = preg_replace("/\[url=http:\/\/(.*?)\](.*?)\[\/url\]/si", "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text); $text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si", "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $text); $text = preg_replace("/\[email=(.*?)\](.*?)\[\/email\]/si", "<a href=\"mailto:\\1\">\\2</a>", $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")) { $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 zurückgeben return $text; }
Geändert von schubertmedia (06.04.2006 um 01:29 Uhr)
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
ich kenne mich mit syntax-highlighting nicht so aus. solle deine funktion diese nicht mitbringen?
bei mir beleibt der text einfarbig.
EDIT:
nehme ich zurück aber hast du bezüglich php auch noch eine änderung auf lager? so ist der ausgegebene code nicht brauchbar.
die hochkommata werden gebackslahed!
gruß azoo
Geändert von azoo (06.04.2006 um 17:08 Uhr)
Hallo azoo,
hast Du den Code von Dir angepast ? Was hast Du durch die Funktion genau laufen lassen und läuft nicht.
mfg. Nico
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)