 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
12.04.2003, 12:56
|
#1
|
|
TP-Veteran
Registriert seit: Jan 2002
|
Seb's BB-Code-Parser
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)
|
|
|
20.03.2005, 00:33
|
#2
|
|
TP-Junior
Registriert seit: Mar 2005
|
hallo !
ist die datei defeckt ?
bekomme nur ne weiße seite wenn ich drauf klicke
mfg boss
|
|
|
20.03.2005, 00:40
|
#3
|
|
TP-Member
Registriert seit: Mar 2005
|
Hallo,
bei mir geht es auch nicht.
mfg. Nico
__________________
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
|
|
|
20.03.2005, 00:42
|
#4
|
|
TP-Member
Registriert seit: Sep 2004
Ort: Odenwald
|
=> http://www.traum-projekt.com/forum/s...984#post473984
Zitat:
|
Zitat von Robert
Hallo nochmal,
ich bitte 2-3 Tage um Geduld ...
Wir liegen aktuell auf einem externen Server und werden jetzt nicht soviel arbeit in diese temporäre lösung investieren.
Auf dem alten (dann neuen Server) sollte alles dann wieder gehen ..
Viele Grüße
Robert
|
|
|
|
20.03.2005, 09:07
|
#5
|
|
TP-Junior
Registriert seit: Mar 2005
|
OK
Ich kann warten danke schön 
|
|
|
05.04.2006, 14:01
|
#6
|
|
TP-Junior
Registriert seit: Apr 2006
|
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:
PHP-Code:
case 'LIST':
$replacement = '<ul><li>' . $inner_string . '</li></ul>';
break;
Gruß azoo
|
|
|
05.04.2006, 14:09
|
#7
|
|
TP-Member
Registriert seit: Mar 2005
|
Hallo,
ich habe es mit den function gemacht:
HTML-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;
}
mfg. Nico
__________________
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
Geändert von schubertmedia (05.04.2006 um 14:12 Uhr).
|
|
|
05.04.2006, 15:04
|
#8
|
|
TP-Junior
Registriert seit: Apr 2006
|
will grade mal deine Funktion testen, wie kann ich sie starten?
ich starte meine bisher so:
PHP-Code:
bbcode_replace($story['story_text']);
Deine F. enthält ja direkt schon 2 Variablen wie ich das sehe!?
Gruß azoo
|
|
|
05.04.2006, 15:24
|
#9
|
|
TP-Member
Registriert seit: Mar 2005
|
Zitat:
|
Zitat von azoo
will grade mal deine Funktion testen, wie kann ich sie starten?
ich starte meine bisher so:
PHP-Code:
bbcode_replace($story['story_text']);
Deine F. enthält ja direkt schon 2 Variablen wie ich das sehe!?
Gruß azoo
|
Hallo
so kannst Du das machen.
PHP-Code:
echo bb_code($story['story_text'], 'Text_länge_bis_umbruch_in_zweichen_anzahl_angeben');
mfg. Nico
__________________
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
|
|
|
05.04.2006, 15:39
|
#10
|
|
TP-Junior
Registriert seit: Apr 2006
|
Ja, danke. Ich tat mich schwer mit deiner Zeichen_Anzahl_Angabe. Jetzt klappts.
Zitat:
|
Text_länge_bis_umbruch_in_zweichen_anzahl_angeben
|
Erklär mir mal warum du diese Abschneidefunktion drinn hast und was du für einen Zahlenwert gesetzt hast.
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).
|
|
|
05.04.2006, 16:21
|
#11
|
|
TP-Member
Registriert seit: Mar 2005
|
Zitat:
|
Zitat von azoo
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.
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
|
Hallo,
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.
|
|
|
06.04.2006, 00:28
|
#12
|
|
TP-Junior
Registriert seit: Apr 2006
|
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).
|
|
|
06.04.2006, 01:21
|
#13
|
|
TP-Member
Registriert seit: Mar 2005
|
Hallo,
jepp, Du hast recht. Bei den Email Code gibt es noch Fehler in der Funktion.
Hier eine kleine änderung, dann sollte es gehen.
HTML-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;
}
mfg. Nico
__________________
Php Webspace
Suche Linkpartner für 10 Projekte, bei Interesse einfach eine PM.
Geändert von schubertmedia (06.04.2006 um 01:29 Uhr).
|
|
|
06.04.2006, 16:35
|
#14
|
|
TP-Junior
Registriert seit: Apr 2006
|
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).
|
|
|
06.04.2006, 23:47
|
#15
|
|
TP-Member
Registriert seit: Mar 2005
|
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)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
| | |