Logo - MyWebsolution.de
User gesamt  :  2370031
User online  :  1
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

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?
Profil ansehen
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


Profil ansehen Mail senden
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($linkname045-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("/(&#039;.*&#039;)/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), 07)== 'http://' OR substr(strtolower($word), 08)== 'https://' OR substr(strtolower($word), 04)=='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.
Profil ansehen
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($linkname045-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("/(&#039;.*&#039;)/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), 07)== 'http://' OR substr(strtolower($word), 08)== 'https://' OR substr(strtolower($word), 04)=='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;
}



Profil ansehen Mail senden
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.
Profil ansehen
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.


Profil ansehen Mail senden
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;(
Profil ansehen
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.


Profil ansehen Mail senden
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!
Profil ansehen
29.01.2007 13:21 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
np :)


Profil ansehen Mail senden
Seite: 1 2 3 4  > no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik