SetaPDF
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 02.04.2003, 23:14   #1
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein

'BB-Codes' etwas anders geparst...


Da hier ja immer wieder mal Diskussionen über die Umsetzung von 'BB-Code'-Formatierung geführt werden und ich jetzt selbst sowas gebrauchen konnte, hab jetzt mal eine eigene Parsing-Funktion für sowas geschrieben.

Anders als die 'Standard-Lösung' kommt meiner mit einem einzigen preg_replace für alle Tags aus (die Schleife um den preg-match()-Aufruf wird für verschachtelte Tags benötigt).

Es gibt nur ein Muster [TAG=ARGUMENT]INNERER_STRING[/TAG] (wobei =ARGUMENT optional ist), jedes Vorkommen wird mittels einer Callback-Funktion ausgetauscht, an die TAG, INNERER_STRING und ARGUMENT als übergeben werden.
Dort drin gibt's ein switch, das die Argumente auswertet und die entsprechende Ausgabe vornimmt.

Was haltet ihr von dem Ansatz?

Es ist umständlicher als einfach für jeden vorgesehenen Tag ein Pattern auszutauschen, aber ich finds so trotzdem irgendwie eleganter.

PHP-Code:
function bbcode_replace($string)
{
    while(
$old_string != $string)
    {
        
$old_string $string;
        
$string preg_replace('{\[(\w+)((=)(.+)|(.*))\]((.|\n)*)\[/\\1\]}Ue'"bbcode_process('\\1', '\\6', '\\4');"$string);
    }

    return 
$string;
}


function 
bbcode_process($tag$inner_string$argument false)
{
    
ob_start('ob_gzhandler');

    switch(
$tag)
    {
        case 
'b':
        case 
'i':
        case 
'u':
            echo 
"<$tag>$inner_string</$tag>";
            break;

        case 
'code':
            echo 
'<b>Code:</b><hr /><pre style="font-size:12px;">' $inner_string '</pre><hr />';
            break;

        case 
'color':
            
$color preg_match("[^[0-9a-fA-F]{3,6}$]"$argument) ? '#' $argument $argument;

            echo 
'<span style="color:' $color '">' $inner_string '</span>';
            break;

        case 
'email':
            
$address $argument $argument $inner_string;
            echo 
'<a href="mailto:' $address '">' $inner_string '</a>';
            break;

        case 
'image':
            echo 
'<img src="' $argument '" />';
            break;

        case 
'quote':
            echo 
'<b>Quote:</b><hr />' $inner_string '<hr />';
            break;

        default:    
// unknown tag => reconstruct and return original expression
            
echo '[' $tag ']' $inner_string '[/' $tag .']';
            break;
    }

    
$buffer ob_get_contents();
    
ob_end_clean();

    return 
$buffer;

seb ist offline   Mit Zitat antworten


Alt 03.04.2003, 09:31   #2
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Schickes Ding, nur wozu ist die while-Schleife da? Ersetzt preg_replace nicht alle Treffer?
Stuck Mojo ist offline   Mit Zitat antworten
Alt 03.04.2003, 09:48   #3
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
PHP-Code:
        case 'b':
        case 
'i':
        case 
'u':
            echo 
"<$tag>$inner_string</$tag>";
            break; 
is aber nicht sehr schön oder?
ich mein eine $var in "" setzen.

Was ist eigentlich falsch daran?
Alex
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 03.04.2003, 09:55   #4
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Zitat:
Original geschrieben von holunda

is aber nicht sehr schön oder?
ich mein eine $var in "" setzen.

Was ist eigentlich falsch daran?
Alex
nix
Stuck Mojo ist offline   Mit Zitat antworten
Alt 03.04.2003, 11:41   #5
TP-Veteran
 
Benutzerbild von fettmme
 
Registriert seit: Feb 2002
fettmme bringt sich richtig einfettmme bringt sich richtig ein
Sieht schick aus. Ich werd's die Tage mal auf meiner Seite ausprobieren. Danke
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
fettmme ist offline   Mit Zitat antworten
Alt 03.04.2003, 13:35   #6
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
hab mal irgendwo aufgeschnappt dass man das so machen soll:

PHP-Code:
echo "<".$tag.">".$inner_string."</".$tag.">"
und da wollte ich fragen was der Unterschied ist ...
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 03.04.2003, 13:55   #7
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Da gehts lang: http://www.traum-projekt.com/forum/s...720#post186720

Gruss
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Alt 03.04.2003, 20:55   #8
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
Schickes Ding, nur wozu ist die while-Schleife da? Ersetzt preg_replace nicht alle Treffer?
Jein. Ineinander verschachtelte Vorkommen kann es nicht mit einem Aufruf komplett austauschen, daher ist die Schleife notwendig:

PHP-Code:
[b][i]Dieser Text ist fett und kursiv[/i]/b]
Nach ersten Aufruf:
<
b>[i]Dieser Text ist fett und kursiv[/i]</b>
Verstehscht?
==> 
nach 2. Aufruf:
<
b><i>Dieser Text ist fett und kursiv</i></b
Zitat:
hab mal irgendwo aufgeschnappt dass man das so machen soll:
Wenn man's ganz genau nimmt, hast Du recht.
Variablen in Strings zu parsen,
kostet PHP theoretisch ein klitzekleinesbisschen mehr Zeit, als den String aus 'festen' Werten und Variablen zusammenzusetzen.

Der Unterschied dürfte allerdings in den allermeisten Fällen derart gering sein, dass man der Übersichtlichkeit des Codes auch mal Vorrang geben kann.



Und nochwas:

Falls ihr das benutzen wollt, schmeißt den Krams mit dem Output Buffering raus. Mir fiel im Nachhinein ein, das ist in dem Fall völlig unnötig ist.

Ich hatte den Output Buffer erst 'aus Gewohnheit' verwendet, weil ich eine sehr ähnliche Funktion habe, die mit includes arbeitet (und da braucht mans).

Hier reichts völlig aus, statt den echos die Replacement-Strings in eine Variable zu schreiben und die zurückzugeben.
seb ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
'BB-Codes' etwas anders geparst... 'BB-Codes' etwas anders geparst...
« Kommado-Interpreter? | Prüffunktionen? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:28 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67