Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] &a mp;a mp;a mp;a mp;q uot; B B

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] &a mp;a mp;a mp;a mp;q uot; B B

    hi,

    da oft gefragt wird, wie man BB-Code's realisieren kann,
    erkläre ich das hier mal mit den BB-Code's [b]Text[/b] und [url]http://phpfriend.de[/url]

    Den BB-Code [b]Text[/b] kann man mit preg_replace() "übersetzen":

    Code:
    $text = ("Ein fetter Text!");
    $text = preg_replace("|\[b\](.*)\[/b\]|Uism","$1",$text);
    Erklärung zum Pattern-Teil von preg_replace:
    [ und ] müssen jeweils mit einem Backslash \ markiert werden.
    (.*) ist ein Platzhalter für einen undefinierten Text (wie % bei MySQL-Abfragen).

    Die Pattern-Modifiers Uism:
    U: Durch den U-Modifier wird PHP nicht versuchen, soviele Chars einzufangen wie nur möglich bis es kein mögliches Ende des Patterns mehr findet.
    i: Es wird nicht zwischen GROSS- und klein-Buchstaben unterschieden
    s: Dadurch kann man bei (.*)-Wildcards auch mit \r\n usw. arbeiten
    m: Ohne m-Modifier würde es nur String-Anfang und -Ende geben. Diese werden über ^ bzw. $ angesprochen.
    Im MultiLine-Mode erkennt PHP NewLines und erweitert damt die Wirkung von ^ und $ ..


    Etwas schwieriger wird es, wenn man [URL]-Tags ersetzen will und dabei längere URL's gekürzt werden sollen,
    dafür wird preg_replace_callback(), create_function(), strlen() und substr() benötigt.

    preg_replace_callback() wird benötigt,
    weil die URL für den Link-Titel verändert werden soll,
    die Funktion ist ähnlich aufgebaut wie preg_replace().
    Code:
    $text = preg_replace_callback("||Uism","",$text);
    Die Pattern-Modifiers sind schon bekannt vom ersten Beispiel,
    neu ist hier, dass an zweiter Stelle eine Funktion benötigt wird,
    die hier einfachheitshalber mit create_function() erstellt wurde.
    Code:
    $text = preg_replace_callback("||Uism",create_function('$matches',''),$text);
    $matches ist ein Array,
    [0] ist der gesamte String des Callback's,
    ab [1] kommen dann die Zeichen in den Klammern,
    in diesem Fall ist also [1] http:// und [2] der unbekannte Text (.*).

    Mit strlen() prüfen wir, ob der String mehr als 30 Zeichen enthält,
    wenn dies der Fall ist, werden mit substr($matches[2],0,17) die ersten 17 Zeichen der URL ausgegeben und anschliessend mit substr($matches[2],-5) die letzten 5 Zeichen.

    Code:
    create_function(
    '$matches',
    'if (strlen($matches[2]) > 30) {
    return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>";
    }
    ')
    Wenn der String weniger als 30 Zeichen enthält wird die URL ungekürzt zurückgegeben, gesamter Code:

    Code:
    $text = ("Die phpfriend.de-Tutorials: http://phpfriend.de/forum/viewforum....r30zeichensind");
    
    $text = preg_replace_callback("|\[url\](http://)(.*)\[/url\]|Uism",create_function(
       '$matches',
       'if (strlen($matches[2]) > 30) {
          return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>";
        } else {
         return "<a href=\"http://".$matches[2]."\" target=_blank>http://".$matches[2]."</a>";
        }
    '),$text);
    Falls man [php]-Tags benutzen will,
    ist die Funktion highlight_string() hilfreich,
    highlight_string() kann dann in Kombination mit preg_replace_callback() angewendet werden..

    _______________________________
    Alle Angaben ohne Gewähr

  • imported_Ben
    antwortet
    Zitat von max-dhom
    ich glaube das hat was mit prompt() und Javascript zu tun, oder?
    Jup:
    http://de.selfhtml.org/javascript/ob...dow.htm#prompt

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    ich glaube das hat was mit prompt() und Javascript zu tun, oder?

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    Naja eben diese Masken, die z.B. erscheinen wenn man einen Ordner öffnen will der per htacces geschützt ist, z.B.

    Verstehst du was ich meine?

    Einen Kommentar schreiben:


  • imported_Ben
    antwortet
    Was ist ein "programmeigenes Eingabefenster"?

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    Hallo zusammen, wie macht man das, dass man z.B. auf "Link einfügen" geht und sich dann so ein Eingabefenster öffnet. Also kein Pop-Up sondern ein Programmeigenes Eingabefenster? Danke, Max

    Einen Kommentar schreiben:


  • möchtegernchegga
    antwortet
    hi,

    hab folgendes problem:

    ich hab ein formular mit 2 feldern, bei denen man bbcode anwenden können soll. wie is das realisierbar? mit 1 schaff ichs, aber nicht mit 2.

    hoffe auf baldige antwort.

    Einen Kommentar schreiben:


  • tonne
    antwortet
    guckt keiner ins board oder kann man mir einfach net helfen???

    oder will man nur net

    Einen Kommentar schreiben:


  • tonne
    antwortet
    he,
    hab mir den spass auch mal duchrgelesen...

    ich wollte jetzt meinen code(auch smilies, ia dasselbe, oder net???) in net mysql-db speichern lassen... und dann als array speichern..

    das hat auch soweit gut gefunzt:

    PHP-Code:
    <?php
    while($code mysql_fetch_assoc($result3))
         {
          
    $search[] = $code['search'];
          
    $replace[] = $code['replace'];
         }
     
    $sql "SELECT
                 *
                FROM
                 jeeha_smiles;"
    ;
        
    $result3 mysql_query($sql) or die(mysql_error());
        while(
    $smilies mysql_fetch_assoc($result3))
         {
          
    $search[] = $smilies['search'];
          
    $replace[] = $smilies['replace'];
         }
    ?>
    wenn ich das so gemacht hab und dann mit str_replace umgewandelt hab, hat das auch gefunzt...

    nunja, jezt hab ich hier gelesen, mann sollte {; )}smUi nehmen anstatt ; ) fuer einen smilie, richtig???
    hab ich gemacht, und das ganze mit $text = preg_replace($search, $replace, $data['Inhalt']) ausgeben wolln...
    da kommt jezt folgende meldung:
    in line 52 steht $text = preg_replace($search, $replace, $data['Inhalt']);

    hoffe, mir kann wer helfen, danke

    und noch was: ich habe den /n mit
    erstetzt, da es sonst kein zelensprung gemacht wird... auch hier hab ich {\n}smUi genommen... und es funzt

    PROBLEMGELOEST!!

    hab das problem beloest... anstatt preg_replace hab ich einfach eregi_replace benutzt... tuts auch

    kann mir aber vielleicht mal jemand verraten warum???

    wieder n problem...
    ich hab jetzt wieder n problem... wenn ich ein smilie code benutzen will, bespielsweise den zum grinsenden smilie, und ich packe den in klammern, da der smilie sich auf den text in den klammern bezieht(passiert ja oefter... wie jetzt , sehta das meine ich) und hinter dem smilie-code is die klammer zum schliessen, dann erkennt er net den smilie code, ich hoffe ihr wisst was ich meine... naja, wie mache ich, das er das dennoch erkennt ohne ein leerzeichen da reinzupacken...

    etwas speater...
    so, das alte prob. besteht immer noch...
    ich wollte jetzt mal meinen code in andre scripte einfuegen....
    mein code sieht folgendermasen aus:
    PHP-Code:
    <?php
    $sql 
    "SELECT
              *
             FROM
              jeeha_code;"
    ;
     
    $result3 mysql_query($sql) or die(mysql_error());
     
    $search = array('0');
     
    $replace = array('0');
     while(
    $code mysql_fetch_assoc($result3))
      {
       
    $search[] = $code['search'];
       
    $replace[] = $code['replace'];
      }
     
    $sql "SELECT
              *
             FROM
              jeeha_smiles;"
    ;
     
    $result3 mysql_query($sql) or die(mysql_error());
     while(
    $smilies mysql_fetch_assoc($result3))
      {
       
    $search[] = $smilies['search'];
       
    $replace[] = $smilies['replace'];
      }
     
    $sql "SELECT
              *
             FROM
              jeeha_content
             WHERE
              ID = '
    $id';";
     
    $result mysql_query($sql);
     
    $data mysql_fetch_assoc($result);
     
    $text eregi_replace($search$replace$data['inhalt']);

    ?>
    soweit, sogut... eigentlich sollte sich der code net vom andren unterscheiden(ausser "$data['inhalt']"... das muss aber so sein...)
    nunja, aber es wird NIX umgewandelt...
    die arrays funzen... habs ueberprueft, is alles vorhanden(habs mit "foereach" schleife probiert...)
    dann hab ich geguct ob sich die variable $text nochmal irgentwo veraendert.... pustekuchen.... auch net... und auch der wert von $data['inhalt'] is so, wie er sein soll...
    ich hab sogar ueberprueft, ob die beiden werte in $text und data['inhalt'] dersselbe is... und er isses...
    also, wenn mir jemand hier helfen kann... ich bin echt verzweifelt

    Einen Kommentar schreiben:


  • Pain-maker
    antwortet
    Öhm... wenn ich PHP-Code-Highlighting will dann hab ich das Problem das mein Code nicht korrekt angezeigt wird!
    Meine Funktion:
    PHP-Code:
    function php($param) {
        
    ob_start();
        
    highlight_string($param);
        
    $output=ob_get_contents();
        
    ob_end_clean();
        return 
    $output;

    Und wenn ich folgenden Code damit überarbeitet haben will:
    PHP-Code:
    <?php

    $var
    ="test";
    echo 
    $var;

    ?>
    bekomme ich: (auf das \ nach "test" achten)
    PHP-Code:
    <?php

    $var
    ="test\";
    echo 
    $var;

    ?>
    Was soll das?
    Dadurch wird nämlich auch die Farbveränderung durcheinander gebracht und alles nach test ist Rot
    Was muss ich vorher noch machen damit solche Fehler nicht vorkommen?

    Danke

    //EDIT: Ich hab das Problem lösen können!
    PHP-Code:
    highlight_string(stripslashes($string)); 

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    dass ist jetzt verständlicher...
    Gerade so. Du mußt den Kram, der zwischen den Code Tags liegt, vorher in Sicherheit bringen, bevor Du die anderen Tags bearbeitest, und danach wieder reinkopieren.

    Einen Kommentar schreiben:


  • Benny
    antwortet
    nee, ich glaub eher nicht... wäre vermutlich zu simpel(?)*gg*
    ok, ich versuchs genauer:

    ich habe ein newsscript geschrieben + zugehörige bbcode-klasse...
    in der klasse wird der newstext geparst, sprich wird zu <span style=font-weight: bold;"></span> etc...
    wenn jetzt aber ein [code]-teil vorkommt, sollen die bbcode-tags, die innerhalb dieses [code]-teiles liegen nicht angetastet werden...
    hab irgendwie die vermutung, dass ich das mit preg_replace_callback() angehen muss, weiß allerdings nicht genau wie...
    hoffe, dass ist jetzt verständlicher...

    Einen Kommentar schreiben:


  • imported_Ben
    antwortet
    Was meinst Du genau?
    Suchst Du htmlspecialchars() oder highlight_string()?

    Einen Kommentar schreiben:


  • Benny
    antwortet
    wie schaffe ich es nun beispielsweise einen [code]-teil einzuführen, wobei codes innerhalb von nicht geparst werden?
    irgendwie hängst da bei mir irgendwo... :P

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    hat sich inzwischen erübrigt. ging schneller als gedacht

    Einen Kommentar schreiben:

Lädt...
X