|
|
User gesamt
|
:
|
2370031
|
User online
|
:
|
1
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Tutorials » bbcodes tutorial
Seite:
|
1
2
3
4
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
25.01.2007 18:47 Uhr
|
bbcodes tutorial
|
fish
|
Forenuser
|
|
registriert
|
08.01.2007
|
wohnt in
|
de/wü
|
Beiträge
|
20
|
|
hallo. ich habe eine frage zu den bbcodes
ich habe dein tutoarial mal ausprobiert, allerdings funktioniert es nicht, mehrere php-codes in einer seite auszugeben. stattdessen erscheint:
PHP:
0
PHP:
1
<?php trim($_variable);?>
woher kommt das?
wie kann ich zeilen anzeigen lassen?
|
|
|
25.01.2007 20:55 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
die rückersetzung hast du drin?
PHP:
<?php
//PHP Code wieder einfügen
foreach($php[1] as $key => $value)
$text = preg_replace("/\[php\]".$key."\[\/php\]/siU", $value, $text);
?>
?
Ich verwende den Code aus dem Tutorial nämlich so ziemlich 1zu1 hier im Forum..
poste mal den Quellcode von dir bitte
|
|
|
27.01.2007 17:44 Uhr
|
|
fish
|
Forenuser
|
|
registriert
|
08.01.2007
|
wohnt in
|
de/wü
|
Beiträge
|
20
|
|
okay mein quellcode:
etwas viel vieleicht aber gut... (hab mal [php durch [ php ersetzt, solltest du im tut vll auch machen ;-) (kannst du beim tutorial vielleicht auch nochmal die ganze funktion am ende posten? danke.
ausserdem funktionieren die zitate (verschachteln ect) bei mir irgentwie nicht.
http://www.beta.bierquartier.de/php_testcenter/bbcodes
PHP:
<?php
//konfiguration
//der kasten für den php-code
$php_start = "<p class=\"code_php\" style=\"overflow:auto; white-space:pre;\">";
$php_end = "</p>";
// Prüft die Linklänge und passt sie gegebenenfalls an
function linkLenght($treffer) {
// $treffer[1] ist die URL
$url = trim($treffer[1]);
// $treffer[2] ist der Ausgabename
// wurde kein Name angegeben, wird die URL als Name gewählt
if(strlen(trim($treffer[2]))!=0) {
$linkname = $treffer[2];
}
else {
$linkname = $treffer[1];
}
// legt eine maximale Länge von 50 Zeichen fest
// Ausnahme bei [img]-Tags
if(strlen($linkname)>50 AND !substr_count(strtolower($linkname), '[img]') AND !substr_count(strtolower($linkname), '[/img]')) {
$linkname = substr($linkname, 0, 45-3)."...".substr($linkname, -5);
}
// Rückgabelink
$ergebnis = "<a href=\"".$url."\">".$linkname."</a>";
return $ergebnis;
}
function no_spam($mail) {
$str = "";
$a = unpack("C*", $mail[1]);
foreach ($a as $b)
$str .= sprintf("%%%X", $b);
$mail[1] = str_replace(".", " dot ", $mail[1]);
$link = str_replace("@", " bei ", $mail[1]);
return "<a href=\"mailto:".$str."\">".$link."</a>";
}
function parseVar($treffer) {
// $treffer[1] ist die Variable zwischen den [var]-Tags
$str = $treffer[1];
// Klammer in grün hervorheben
$str = str_replace("[", "<span style=\"color:#007700\">[</span>", $str);
$str = str_replace("]", "<span style=\"color:#007700\">]</span>", $str);
// alles was zwischen single quotes ( ') steht rot hervorheben
$str = preg_replace("/('.*')/Uis", "<span style=\"color:#DD0000\"></span>", $str);
// den Rest blau hervorheben
$str = "<span style=\"color:#0000BB\">".$str."</span>";
return $str;
}
function bbcodes ($text) {
//php-code
$php = array();
// PHP Code zwischenspeichern, damit er nicht durch andere Funktionen (z.B. nl2br) verfälscht wird
preg_match_all("/\[php\](.*)\[\/php\]/siU", $text, $php);
foreach($php[0] as $key => $value){
// Im Text durch eine Variable ersetzen, um diese dann später wiederum durch den Code zu ersetzen
$text=preg_replace('#'.preg_quote($value, '#').'#','[ php]'.$key.'[/ php]',$text,1);
// Code highlighten
$php[1][$key] = highlight_string($php[1][$key], TRUE);
$php[1][$key] = $php_start.$php[1][$key].$php_end;
}
// Wörter mit mehr als 60 Zeichen werden ab dem 60. Zeichen um ein Leerzeichen ergänzt
// damit der Browser den Text umbrechen kann (, sonst wird das Layout zerstört)
$max_word_lenght = 60;
// Die Länge von Links ist größer, da sie nur im Quelltext als 'lang' erscheinen
// Links werden später noch gesondert behandelt
$max_link_lenght = 200;
// Trennzeichen
$splitter = " ";
// Text in Zeilen aufteilen, sonst würden Zeilenumbrüche (\n) nicht als Worttrennung erkannt
$lines = explode("\n", $text);
//links kürzen
foreach($lines as $key_line => $line) {
// jede Zeile in Wörter aufteilen
$words = explode(" ",$line);
// jedes Wort prüfen
foreach($words as $key_word => $word) {
// für Links wird die maximale Länge erhöht
if(substr(strtolower($word), 0, 7)== 'http://' OR substr(strtolower($word), 0, 8)== 'https://' OR substr(strtolower($word), 0, 4)=='www.') {
$max_lenght = $max_link_lenght;
}
else {
$max_lenght = $max_word_lenght;
}
$word = trim($word);
// BB-Code Tags entfernen, da sie nicht zur Buchstabenlänge eines Wortes zählen
$word = preg_replace("/\[(.*)\]/Usi", "", $word);
if(strlen($word)>$max_lenght) {
// Trennen des Wortes nach max_length Buchstaben
$words[$key_word] = chunk_split($words[$key_word], $max_lenght, $splitter);
// abziehen der Länge des Trennzeichens, dieses wird am Ende automatisch
// noch einmal eingefügt
$length = strlen($words[$key_word])-strlen($splitter);
$words[$key_word] = substr($words[$key_word],0,$length);
}
}
// fügt die veränderten Wörter wieder zur Zeile als String zusammen
$lines[$key_line] = implode(" ", $words);
// fügt Zeilen wieder zum gesamten Text als String zusammen
$text = implode("\n", $lines);
//text formatieren darstellen
$text = preg_replace("/\[b\](.*)\[\/b\]/Usi", "<span style=\"font-weight: bold;\"></span>", $text);
$text = preg_replace("/\[i\](.*)\[\/i\]/Usi", "<span style=\"font-style: italic;\"></span>", $text);
$text = preg_replace("/\[u\](.*)\[\/u\]/Usi", "<span style=\"text-decoration: underine;\"></span>", $text);
$text = preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi", "<span style=\"color:\"></span>", $text);
$text = preg_replace("/\[img=(.*)\](.*)\[\/img\]/Usi", "<img src=\"\" alt=\"\" />", $text);
$text = preg_replace("/\[img](.*)\[\/img\]/Usi", "<img src=\"\" alt=\"nicht bennantes bild\" />", $text);
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si", "<h1 class=\"ueberschrift\">\1</h1><br />", $text);
$text = preg_replace("/\[h2\](.*?)\[\/h1\]/si", "<h2 class=\"unter_ueberschrift\">\1</h2><br />", $text);
//php-variablen hervorheben
$text = preg_replace_callback("/\[var\](.*)\[\/var\]/Usi", 'parseVar', $text);
//email
$text = preg_replace_callback('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6})"si', 'no_spam', $text);
//url-umwandlung
$text = preg_replace_callback("/\[url=(.*)\](.*)\[\/url\]/Usi", 'linkLenght', $text);
$text = preg_replace_callback('#(( |^)(((ftp|http|https|)://)|www.)\S+)#mi', 'linkLenght', $text);
// Zitate umwandeln, evtl. auch verschachtelt
//breite des zitatkastens in pixeln
$width = 575;
while(preg_match('/\[quote\](.*)\[\/quote\]/Uis', $text)) {
$width -= 10;
$quote_start = "<p class=\"zitat\" style=\" width:".$width."px\">";
$quote_end = "</p>";
$text = str_replace(array("[quote]","[/quote]"),array($quote_start,$quote_end),$text);
}
//smilies definieren
$smilies = array(
':D' => array('biggrin.gif', '*grins*'),
//okay, die smilies mach ich ein bischen anders als du...
);
//smiies umwandeln
foreach ($smilies as $find => $replace) {
list($img, $title) = $replace;
$replace = '<img src="'.$smilie_pfad.''.$img.'" alt="'
.$find.'" title="'.$title.'"/>';
$text = str_replace($find, $replace, $text);
}
//aus umbrüchen <br> machen
$text = nl2br($text);
//PHP Code wieder einfügen
foreach($php[1] as $key => $value) {}
$text = preg_replace("/\[php\]".$key."\[\/php\]/siU", $value, $text);
}
return $text;
}
Dieser Beitrag wurde am 27.01.2007 um 17:47:12 Uhr von fish zum 2. Mal editiert.
|
|
|
27.01.2007 18:28 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Du hast die Funktionen auch verändert..
2 Klammern sind falsch gesetzt und bei den Zitaten benutzt du str_replace statt preg_replace.
Die PHP-Konfigurationsvariablen kannst du nicht außerhalb der Funktion definieren, weil die Variablen dann in der Funktion nicht bekannt sind.
Schalt beim Testen auch mal error_reporting(E_ALL) an, dann werden dir die ganzen Variablen angezeigt, die in der FUnktion nicht bekannt sind.
Hier die korrigierte Version deiner Funktion:
PHP:
<?php
// Prüft die Linklänge und passt sie gegebenenfalls an
function linkLenght($treffer) {
// $treffer[1] ist die URL
$url = trim($treffer[1]);
// $treffer[2] ist der Ausgabename
// wurde kein Name angegeben, wird die URL als Name gewählt
if(strlen(trim($treffer[2]))!=0) {
$linkname = $treffer[2];
}
else {
$linkname = $treffer[1];
}
// legt eine maximale Länge von 50 Zeichen fest
// Ausnahme bei [img]-Tags
if(strlen($linkname)>50 AND !substr_count(strtolower($linkname), '[img]') AND !substr_count(strtolower($linkname), '[/img]')) {
$linkname = substr($linkname, 0, 45-3)."...".substr($linkname, -5);
}
// Rückgabelink
$ergebnis = "<a href=\"".$url."\">".$linkname."</a>";
return $ergebnis;
}
function no_spam($mail) {
$str = "";
$a = unpack("C*", $mail[1]);
foreach ($a as $b)
$str .= sprintf("%%%X", $b);
$mail[1] = str_replace(".", " dot ", $mail[1]);
$link = str_replace("@", " bei ", $mail[1]);
return "<a href=\"mailto:".$str."\">".$link."</a>";
}
function parseVar($treffer) {
// $treffer[1] ist die Variable zwischen den [var]-Tags
$str = $treffer[1];
// Klammer in grün hervorheben
$str = str_replace("[", "<span style=\"color:#007700\">[</span>", $str);
$str = str_replace("]", "<span style=\"color:#007700\">]</span>", $str);
// alles was zwischen single quotes ( ') steht rot hervorheben
$str = preg_replace("/('.*')/Uis", "<span style=\"color:#DD0000\"></span>", $str);
// den Rest blau hervorheben
$str = "<span style=\"color:#0000BB\">".$str."</span>";
return $str;
}
function bbcodes ($text) {
// !!-- Konfiguration nach hier setzen --!!
//konfiguration
//der kasten für den php-code
$php_start = "<p class=\"code_php\" style=\"overflow:auto; white-space:pre;\">";
$php_end = "</p>";
//php-code
$php = array();
// PHP Code zwischenspeichern, damit er nicht durch andere Funktionen (z.B. nl2br) verfälscht wird
preg_match_all("/\[php\](.*)\[\/php\]/siU", $text, $php);
foreach($php[0] as $key => $value){
// Im Text durch eine Variable ersetzen, um diese dann später wiederum durch den Code zu ersetzen
$text=preg_replace('#'.preg_quote($value, '#').'#','[ php]'.$key.'[/ php]',$text,1);
// Code highlighten
$php[1][$key] = highlight_string($php[1][$key], TRUE);
$php[1][$key] = $php_start.$php[1][$key].$php_end;
}
// Wörter mit mehr als 60 Zeichen werden ab dem 60. Zeichen um ein Leerzeichen ergänzt
// damit der Browser den Text umbrechen kann (, sonst wird das Layout zerstört)
$max_word_lenght = 60;
// Die Länge von Links ist größer, da sie nur im Quelltext als 'lang' erscheinen
// Links werden später noch gesondert behandelt
$max_link_lenght = 200;
// Trennzeichen
$splitter = " ";
// Text in Zeilen aufteilen, sonst würden Zeilenumbrüche (\n) nicht als Worttrennung erkannt
$lines = explode("\n", $text);
//links kürzen
foreach($lines as $key_line => $line) {
// jede Zeile in Wörter aufteilen
$words = explode(" ",$line);
// jedes Wort prüfen
foreach($words as $key_word => $word) {
// für Links wird die maximale Länge erhöht
if(substr(strtolower($word), 0, 7)== 'http://' OR substr(strtolower($word), 0, 8)== 'https://' OR substr(strtolower($word), 0, 4)=='www.') {
$max_lenght = $max_link_lenght;
}
else {
$max_lenght = $max_word_lenght;
}
$word = trim($word);
// BB-Code Tags entfernen, da sie nicht zur Buchstabenlänge eines Wortes zählen
$word = preg_replace("/\[(.*)\]/Usi", "", $word);
if(strlen($word)>$max_lenght) {
// Trennen des Wortes nach max_length Buchstaben
$words[$key_word] = chunk_split($words[$key_word], $max_lenght, $splitter);
// abziehen der Länge des Trennzeichens, dieses wird am Ende automatisch
// noch einmal eingefügt
$length = strlen($words[$key_word])-strlen($splitter);
$words[$key_word] = substr($words[$key_word],0,$length);
}
}
// fügt die veränderten Wörter wieder zur Zeile als String zusammen
$lines[$key_line] = implode(" ", $words);
// !!-- Klammer schließen --!!
}
// fügt Zeilen wieder zum gesamten Text als String zusammen
$text = implode("\n", $lines);
//text formatieren darstellen
$text = preg_replace("/\[b\](.*)\[\/b\]/Usi", "<span style=\"font-weight: bold;\"></span>", $text);
$text = preg_replace("/\[i\](.*)\[\/i\]/Usi", "<span style=\"font-style: italic;\"></span>", $text);
$text = preg_replace("/\[u\](.*)\[\/u\]/Usi", "<span style=\"text-decoration: underine;\"></span>", $text);
$text = preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi", "<span style=\"color:\"></span>", $text);
$text = preg_replace("/\[img=(.*)\](.*)\[\/img\]/Usi", "<img src=\"\" alt=\"\" />", $text);
$text = preg_replace("/\[img](.*)\[\/img\]/Usi", "<img src=\"\" alt=\"nicht bennantes bild\" />", $text);
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si", "<h1 class=\"ueberschrift\"></h1><br />", $text);
$text = preg_replace("/\[h2\](.*?)\[\/h1\]/si", "<h2 class=\"unter_ueberschrift\"></h2><br />", $text);
//php-variablen hervorheben
$text = preg_replace_callback("/\[var\](.*)\[\/var\]/Usi", 'parseVar', $text);
//email
$text = preg_replace_callback('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6})"si', 'no_spam', $text);
//url-umwandlung
$text = preg_replace_callback("/\[url=(.*)\](.*)\[\/url\]/Usi", 'linkLenght', $text);
$text = preg_replace_callback('#(( |^)(((ftp|http|https|)://)|www.)\S+)#mi', 'linkLenght', $text);
// Zitate umwandeln, evtl. auch verschachtelt
//breite des zitatkastens in pixeln
$width = 575;
while(preg_match('/\[quote\](.*)\[\/quote\]/Uis', $text)) {
$width -= 10;
$quote_start = "<p class=\"zitat\" style=\" width:".$width."px\">";
$quote_end = "</p>";
// !!-- preg_replace verwenden --!!
$text = preg_replace("/\[quote](.*)\[\/quote\]/Uis", $quote_start."\1".$quote_end, $text);
}
//smilies definieren
$smilies = array(
':D' => array('biggrin.gif', '*grins*'),
//okay, die smilies mach ich ein bischen anders als du...
);
//smiies umwandeln
foreach ($smilies as $find => $replace) {
list($img, $title) = $replace;
$replace = '<img src="'.$smilie_pfad.''.$img.'" alt="'
.$find.'" title="'.$title.'"/>';
$text = str_replace($find, $replace, $text);
}
//aus umbrüchen <br> machen
$text = nl2br($text);
//PHP Code wieder einfügen
// !!-- falsch geschlossene Klammer entfernen--!!
foreach($php[1] as $key => $value) {
$text = preg_replace("/\[php\]".$key."\[\/php\]/siU", $value, $text);
}
return $text;
}
|
|
|
28.01.2007 15:57 Uhr
|
|
fish
|
Forenuser
|
|
registriert
|
08.01.2007
|
wohnt in
|
de/wü
|
Beiträge
|
20
|
|
danke! php funktioniert. aber quotes sind immer noch falsch...
also [quote ][quote ]TEXT[/quote ]text[/quote ] gibt <p class="zitat" style=" width:565px"></p>text[/quote aus...
Dieser Beitrag wurde am 28.01.2007 um 16:44:29 Uhr von fish zum 2. Mal editiert.
|
|
|
28.01.2007 17:08 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Benutz mal <div> statt <p>. Verschachtelte <p> machen syntaktisch nämlich keinen sinn und werden deshalb untereinander dargestellt.
|
|
|
28.01.2007 19:35 Uhr
|
|
fish
|
Forenuser
|
|
registriert
|
08.01.2007
|
wohnt in
|
de/wü
|
Beiträge
|
20
|
|
habe ich jetzt gemacht...
eingabe: [ quote]WWW.X.DE[ quote]LOLOMGWTF[ /quote]TEST[ /quote]
ausgabe: <div class="zitat" style="width:565px;"></div>TEST[/quote]
was läuft da falsch
|
|
|
28.01.2007 23:24 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Man muss zwei backslashes ( \\ ) benutzen, also \\1
PHP:
<?php
// Zitate umwandeln, evtl. auch verschachtelt
//breite des zitatkastens in pixeln
$width = 575;
while(preg_match('/\[quote\](.*)\[\/quote\]/Uis', $text)) {
$width -= 10;
$quote_start = "<p class=\"zitat\" style=\" width:".$width."px\">";
$quote_end = "</p>";
// !!-- preg_replace verwenden --!!
$text = preg_replace("/\[quote](.*)\[\/quote\]/Uis", $quote_start."\\1".$quote_end, $text);
}
?>
Das wird bei dem PHP-Code hier nicht richtig dargestellt, weil die highlight_string Funktion das als einen "escapten" Backslahs erkennt.
Dieser Beitrag wurde am 28.01.2007 um 23:25:11 Uhr von Flitze zum 1. Mal editiert.
|
|
|
29.01.2007 09:08 Uhr
|
|
fish
|
Forenuser
|
|
registriert
|
08.01.2007
|
wohnt in
|
de/wü
|
Beiträge
|
20
|
|
super, es funktioniert jetzt alles. DANKE nochmal!
|
|
|
29.01.2007 13:21 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
np
|
|
|
Seite:
|
1
2
3
4
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|