bbcode
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beitrag
buchstabe
englisch
fetten
funktion
inhalt
kriegen
margin
muster
option
package
schleifen
span
tag
variable
verschachtelung
vorgehensweise
zeichenkette
zeilenumbruch
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
function bbcode($bbcode) {
$bbcode = stripslashes ($bbcode);
$muster = array();
$ersetzten = array();
$muster[] = "/&/U";
$ersetzen[] = '&';
$muster[] = "/</U";
$ersetzen[] = '<';
$muster[] = "/>/U";
$ersetzen[] = '>';
$muster[] = "/\"/U";
$ersetzen[] = ' " ';
$muster[] = "/\n/i";
$ersetzen[] = '<br \>';
$muster[] = "/\[b\](.*?)\[\/b\]/U";
$ersetzen[] = '<span class="b">$1</span>';
$muster[] = "/\[i\](.*?)\[\/i\]/U";
$ersetzen[] = '<span class="i">$1</span>';
$muster[] = "/\[u\](.*?)\[\/u\]/U";
$ersetzen[] = '<span class="u">$1</span>';
$muster[] = "/\[quote\](.*?)\[\/quote\]/U";
$ersetzen[] = '<div class="quote">Zitat: <br \>$1</div>';
$muster[] = '/\[url=(.*)\](.*)\[\/url\]/U';
$ersetzen[] = '<a href="\1" target="_blank">\2</a>';
$muster[] = "/\[url\](.*)\[\/url\]/U";
$ersetzen[] = '<a href="\1" target="_blank">\1</a>';
$muster[] = "/\[img\](.*?)\[\/img\]/U";
$ersetzen[] = '<img src="\1" border="0" \>';
$muster[] = "/\[li\](.*)\[\/li\]/U";
$ersetzen[] = '<li>$1</li>';
$muster[] = "/\[ul\](.*)\[\/ul\]/U";
$ersetzen[] = '<ul>$1</ul>';
$muster[] = "/\[php\](.*?)\[\/php\]/U";
$ersetzen[] = '<blockquote><div class="pre">PHP-Code:<br>\1<hr noshade></div></blockquote>';
$muster[] = "/\[code\](.*)\[\/code\]/U";
$ersetzen[] = '<blockquote><div class="pre">Code:<br>\1<hr noshade></div></blockquote>';
$muster[] = "/\[pre\](.*)\[\/pre\]/U";
$ersetzen[] = '<div class="pre">\1</div>';
$bbcode = eregi_replace ("http://www.", "www.", $bbcode);
$bbcode = eregi_replace ("www.", "http://www.", $bbcode);
$bbcode = preg_replace ($muster, $ersetzen, $bbcode);
$bbcode = preg_replace ("#(^|[^\"=]{1})(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)#sm","\\1<a target=\"_blank\" href=\"\\2\\3\">\\3</a>\\4",$bbcode);
return $bbcode;
}
Der Aufruf erfolgt durch $text = bbcode ($text); !
Das Script basiert auf dem Script vom Jacr und wurde bei News4Lima eingesetzt! -
kann dieser code alle Funktionen wie fett, unterstreichen krusiv udn Link
und auch das mit dem php code? -
Ja, vorrausgesetzt das du die CSS "Anweisungen" erstellst!
Also z.B. :
span.b {
font-weight: bold;
}
span.i {
font-style: italic;
}
span.u {
text-decoration: underline;
}
div.quote {
margin: 10px;
padding: 4px;
border: 1px solid #8396C9;
}
div.code {
margin: 10px;
padding: 4px;
border: 1px solid #8396C9;
} -
wenn ich mich nicht t?usche ist doch b der befhel f?r fett, nur es wird nicht fett gemacht
<html>
<head>
<style type="css/text">
span.b
font-weight: bold;
}
span.i
font-style: italic;
}
span.u
text-decoration: underline;
}
div.quote
margin: 10px;
padding: 4px;
border: 1px solid #8396C9;
}
div.code
margin: 10px;
padding: 4px;
border: 1px solid #8396C9;
}
</style>
</head>
<body>
<?php
function bbcode($bbcode)
{
$bbcode = stripslashes ($bbcode);
$muster = array();
$ersetzten = array();
$muster[] = "/&/U";
$ersetzen[] = '&';
$muster[] = "/</U";
$ersetzen[] = '<';
$muster[] = "/>/U";
$ersetzen[] = '>';
$muster[] = "/\"/U";
$ersetzen[] = ' " ';
$muster[] = "/\n/i";
$ersetzen[] = '<br \>';
$muster[] = "/\[b\](.*?)\[\/b\]/U";
$ersetzen[] = '<span class="b">$1</span>';
$muster[] = "/\[i\](.*?)\[\/i\]/U";
$ersetzen[] = '<span class="i">$1</span>';
$muster[] = "/\[u\](.*?)\[\/u\]/U";
$ersetzen[] = '<span class="u">$1</span>';
$muster[] = "/\[quote\](.*?)\[\/quote\]/U";
$ersetzen[] = '<div class="quote">Zitat: <br \>$1</div>';
$muster[] = '/\[url=(.*)\](.*)\[\/url\]/U';
$ersetzen[] = '<a href="\1" target="_blank">\2</a>';
$muster[] = "/\[url\](.*)\[\/url\]/U";
$ersetzen[] = '<a href="\1" target="_blank">\1</a>';
$muster[] = "/\[img\](.*?)\[\/img\]/U";
$ersetzen[] = '<img src="\1" border="0" \>';
$muster[] = "/\[li\](.*)\[\/li\]/U";
$ersetzen[] = '<li>$1</li>';
$muster[] = "/\[ul\](.*)\[\/ul\]/U";
$ersetzen[] = '<ul>$1</ul>';
$muster[] = "/\[php\](.*?)\[\/php\]/U";
$ersetzen[] = '<blockquote><div class="pre">PHP-Code:<br>\1<hr noshade></div></blockquote>';
$muster[] = "/\[code\](.*)\[\/code\]/U";
$ersetzen[] = '<blockquote><div class="pre">Code:<br>\1<hr noshade></div></blockquote>';
$muster[] = "/\[pre\](.*)\[\/pre\]/U";
$ersetzen[] = '<div class="pre">\1</div>';
$bbcode = eregi_replace ("http://www.", "www.", $bbcode);
$bbcode = eregi_replace ("www.", "http://www.", $bbcode);
$bbcode = preg_replace ($muster, $ersetzen, $bbcode);
$bbcode = preg_replace ("#(^|[^\"=]1})(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)#sm","\\1<a target=\"_blank\" href=\"\\2\\3\">\\3</a>\\4",$bbcode);
return $bbcode;
}
$text = $_POST["text"];
$text = bbcode ($text);
echo $text;
?>
</body>
</html>
EDIT 0-checka
Doppelpost gel?scht. Inhalt des zweiten Posts:
ok ich habe es anders gemacht und zwar so:
$bb_codes = array( '[b]' => '<span style="font-weight:bold">', '[/b]' => '</span>', '[i]' => '<span style="font-style:italic">', '[/i]' => '</span>', '[u]' => '<span style="text-decoration:underline">', '[/u]' => '</span>', '[[/b]code[/b]]' => '<td class="code"><span style="color:green;font-size:12px">', '[/[b]code[/b]]' => '</span></td>' );
jetzt habe ich noch ein Problem, wie kann ich das jetzt noch mit dem [url] machen und wie setzte ich ein Hightlight f?r PHP?
Beitrag ge?ndert am 9.07.2005 15:45 von mastermoul1
Beitrag ge?ndert am 9.07.2005 16:51 von 0-checka
Beitrag ge?ndert am 9.07.2005 17:35 von jacr -
Wenn du folgendes schreibst, dann kann es auch nicht klappen :
[...]
span.b
font-weight: bold;
}
[...]
Versuchs mal so :
span.b {
font-weight: bold;
}
jetzt habe ich noch ein Problem, wie kann ich das jetzt noch mit dem [url] machen und wie setzte ich ein Hightlight f?r PHP?
Die BB-Code "[url]" und "" werden schon ersetzt! :wink: Wenn du PHP Code hervorheben willst, dann nimm am besten die Funktion von Alopex in seiner essentials.php! -> http://alopex.pyrokar.lima-city.de/index.php/PHP/essentials.html Beitrag ge?ndert am 9.07.2005 17:13 von lucas9991 Beitrag ge?ndert am 9.07.2005 17:13 von lucas9991 -
kannst du nicht f?r meinen, code hinschreiben, wie ich das mti php machen muss, damit die ]url] ersetzt werden?. W?re ziemlich nett, verstehe das von dem link nicht...
-
lucas9991 schrieb:
function bbcode($bbcode) {
$bbcode = stripslashes ($bbcode);
$muster = array();
$ersetzten = array();
$muster[] = '/&/U';
$ersetzen[] = '&';
$muster[] = '/</U';
$ersetzen[] = '<';
$muster[] = '/>/U';
$ersetzen[] = '>';
$muster[] = '/\'/U';
$ersetzen[] = ' " ';
$muster[] = '/\n/i';
$ersetzen[] = '<br \>';
$muster[] = '/\[b\](.*?)\[\/b\]/U';
$ersetzen[] = '<span class='b'>$1</span>';
$muster[] = '/\[i\](.*?)\[\/i\]/U';
$ersetzen[] = '<span class='i'>$1</span>';
$muster[] = '/\[u\](.*?)\[\/u\]/U';
$ersetzen[] = '<span class='u'>$1</span>';
[...]
Wenn man das so macht, wird nichts ersetzt, wenn zwischen zwei Tags (z.B. [ quote] [ /quote]) ein Zeilenumbruch steht. Wie kann ich den Zeilenumbruch mit in die regul?ren Ausdr?cke reinnehmen? Br?uchte das mal, damit ich auch Umbr?che in Zitaten, fettem Text, etc. haben kann.
Beitrag ge?ndert am 9.12.2005 21:35 von phattek -
Option /m f?r "multiline" macht, das der Punkt auch f?r Zeilenumbr?che steht.
-
alopex schrieb:
Option /m f?r 'multiline' macht, das der Punkt auch f?r Zeilenumbr?che steht.
Ich hab einfach keinen Plan! wo muss denn die Option hin?
("/\[quote\](.*)\[\/quote\]/U")
und wie erreiche ich, dass ich die quotes auch verschachteln kann?
Beitrag ge?ndert am 9.12.2005 21:48 von phattek -
alopex schrieb:
Option /m f?r 'multiline' macht, das der Punkt auch f?r Zeilenumbr?che steht.
Ich hab einfach keinen Plan! wo muss denn die Option hin?
Vor oder hinter das gro?e U (wo ist egal).
("/\[quote\](.*)\[\/quote\]/U")
und wie erreiche ich, dass ich die quotes auch verschachteln kann?
Indem du das gro?e U wegl?sst.
Ob die Verschachtelungen dann aber korrekt sind, kannst du nicht allein mit Regul?ren Ausdr?cken ?berpr?fen. Es gibt aber eine PEAR-Package f?r richtige BBCodes:
Download:
http://pear.php.net/package/HTML_BBCodeParser
Doku (Englisch):
http://pear.php.net/package/HTML_BBCodeParser/docs/latest/
Die kann das. Nur frag mich bitte nicht nach Tipps dazu ... Ich gebe WikiCode den Vorzug vor BBCode. -
So m?sste es also mit Zeilenumbr?chen und Verschachtelungen gehen?
"/\[quote\](.*)\[\/quote\]/m"
Tut es jedenfalls nicht!
Das hier:
"/\[quote\](.*?)\[\/quote\]/m"
geht auch nicht. -
Naja, stimmt! Einfach das gro?e U weglassen, ist nicht die L?sung. Dann frisst der Regex ja alles, bis zum letzten [/quоtе].
Ich glaube, dass geht mit RegEx alleine gar nicht zu l?sen. Da brauchst du noch ein bisschen PHP-Code dazu.
$my_bbcode = '...';
while(
preg_match('/\[quote\](.*)\[\/quote\]/Um',
bbcode)
) {
$my_bbcode = preg_replace(
'/\[quote\](.*)\[\/quote\]/Um',
'<div class="quote">Zitat: <br \>$1</div>',
$my_bbcode
);
}
Das hab ich jetzt aber nicht getestet. Die Vorgehensweise ist folgende:
Die Schleife wird so lange wiederholt, wie sich ein [quоtе]...[/quоtе]-Paar drin befindet. Da der RegEx nicht gierig ist ("U"), sucht er immer das n?chste schlie?ende Tag. Dadurch werden erst die inneren Quotes aufgel?st und dann die ?u?eren, bis keine mehr da sind.
Kann das mal jemand kompetentes ?berpr?fen? -
Also gut, lassen wir das mit dem Verschachteln mal weg!
Ich krieg es trotzdem nicht hin mehzeilige Quotes zu ersetzten.
weder das
/\[quote\](.*?)\[\/quote\]/Um
noch das
/\[quote\](.*)\[\/quote\]/Um
funktioniert! -
Also gut, lassen wir das mit dem Verschachteln mal weg!
Ich krieg es trotzdem nicht hin mehzeilige Quotes zu ersetzten.
weder das
/\[quote\](.*?)\[\/quote\]/Um
noch das
/\[quote\](.*)\[\/quote\]/Um
funktioniert!
Dann probier das :
/\[quote\](.*)\[\/quote\]/Usi
Funktionierte jedenfalls bei mir.
MfG Luacs -
Funktionierts jetzt? Sonst muss ich das Script/den RegEx wirklich mal testen.
Das "i" sorgt ?brigens daf?r, dass auch Gro?buchstaben, wie in [CODE] erkannt werden. Das ist sehr n?tzlich, auch in den anderen BBCode-Tags.
Ich hab tats?chlich die Modifikatoren /m und /s verwechselt!
Siehe auch
http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php
i (PCRE_CASELESS)
Wenn dieser Modifikator gesetzt ist, passen Buchstaben im Suchmuster sowohl auf gro?- als auch auf kleingeschriebene Buchstaben.
m (PCRE_MULTILINE)
Standardm??ig behandelt PCRE eine zu durchsuchende Zeichenkette wie eine einzige Zeile von Zeichen (auch wenn sie tats?chlich mehrere Zeilenumbr?che enth?lt). Das Metazeichen f?r einen Zeilenanfang (^) passt nur auf den Anfang der Zeichenkette, das Metazeichen f?r ein Zeilenende ($) nur auf das Ende der Zeichenkette (falls der Modifikator D nicht gesetzt ist). Das ist genauso wie bei Perl.
Wenn dieser Modifikator gesetzt ist, passen die Zeilenanfang- und Zeilenende-Konstrukte in der Zeichenkette sowohl direkt nach, bzw. vor einem Zeilenumbruch als auch auf deren Anfang und Ende. Das entspricht dem Perl-Modifikator /m. Falls die Zeichenkette keine Sequenz "\n" enth?lt, oder im Suchmuster kein ^ oder $ vorkommt, hat dieser Modifikator keine Wirkung.
s (PCRE_DOTALL)
Wenn dieser Modifikator gesetzt ist, passt das Metazeichen Punkt im Suchmuster auf alle Zeichen inklusive Zeilenumbr?che. Ohne diesen Modifikator sind Zeilenumbr?che ausgeschlossen. Dieser Modifikator entspricht dem Perl-Modifikator /s. Unabh?ngig davon, ob dieser Modifikator gesetzt ist, passt eine verneinende Zeichenklasse wie z.B. [^a] immer auf einen Zeilenumbruch. -
while(
preg_match('/\[quote\](.*)\[\/quote\]/Um',
bbcode)
) {
$my_bbcode = preg_replace(
'/\[quote\](.*)\[\/quote\]/Um',
'<div class="quote">Zitat: <br \>$1</div>',
$my_bbcode
);
}
Das hab ich jetzt aber nicht getestet. Die Vorgehensweise ist folgende:
Die Schleife wird so lange wiederholt, wie sich ein [quоtе]...[/quоtе]-Paar drin befindet. Da der RegEx nicht gierig ist ("U"), sucht er immer das n?chste schlie?ende Tag. Dadurch werden erst die inneren Quotes aufgel?st und dann die ?u?eren, bis keine mehr da sind.
Kann das mal jemand kompetentes ?berpr?fen?
funktioniert bis auf das du ein $ vergessn hattest ;)
sehr gut genau nach dme war ich auch auf der suche, danke!! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage