kostenloser Webspace werbefrei: lima-city


Problem mit preg_replace()

lima-cityForumSonstigesSpam und sonstiges Unvergütetes

  1. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    Und zwar habe ich foltag/gen">gendes Problem. Ich habe ein BBCode-System und nun m?chte ich nat?rlich auch Syntaxhighlighting machen.

    $muster[]   = "/\[php\](.*?)\[\/php\]/Usi";
    $ersetzen[] = '<div>'.highlight_string( ).'</div>';


    So soll es quasi aussehen, aber ich muss nat?rlich der Funktion noch nen Parameter ?bergeben und der soll nat?rlich der text zwischen dem [php][/ php] sein. Alles was ich bisher versucht habe hat nicht funktioniert... :(
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*********c

    Es liegt wahrscheinlich daran, dass Du den Slash, sowie die eckigen Klammern, nicht escaped hast.

    Du kannst es folgendermassen versuchen:
    <?
    $muster[]   = "/\[php\](.*?)\[\/php\]/Usi";
    
    $ersetzen[] = '<div>'.highlight_string( ).'</div>';
    ?>



    //edit: Die Escape-Zeichen werden aus irgendeinem Grund nicht angezeigt.

    Beitrag ge?ndert am 1.10.2005 15:16 von compactdisc
  4. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    Ja genau die werden nicht angezeigt...ich habe sie ja auch escaped, aber mein Problem ist ja wie ich bei highlight_string() die Variable reinmache.

    So geht es auf jeden Fall nicht...

    $muster[] = "/\[php\](.*?)\[\/php\]/Usi";

    $ersetzen[] = '<div>'.highlight_string('\1').'</div>';


    edit: So werden sie ja auch nicht angezeigt... -.-

    Beitrag ge?ndert am 1.10.2005 15:28 von i-spacke
  5. c*********c

    <?
    
    $text = "Hallo [php]Test[/php] m?????ep![php]muuh![/php]fjksjfsdfs";
    
    $muster = "/\[php\](.*)\[\/php\]/Usi";
    
    $text = preg_replace($muster, "<div style='border:1px solid black;'>highlight_string(\$1)</div>", $text);
    
    print($text);
    ?>


    So w?rde es funktionieren. Allerdings wird das "highlight_string" nicht ausgef?hrt ...

  6. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    ..Es soll ja ausgef?hrt werden. Wie wird das denn zum Beispiel hier bei Lima gemacht????
  7. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    -.- Einer wird doch wohl noch die Antwort wissen, oder etwa nicht?
  8. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    *schieb*
  9. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

  10. c*********c

    Hier:

    <?
    $neu = preg_replace("/\[php\](.*)\[\/php\]/Usie", 'highlight_string("$1")', $text, 2);
    ?>


    Gibt ein merkw?rdiges Ergebnis zur?ck :biggrin:
  11. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    Na toll! Bringt mir ja nun reichlich wenig. Wie wird denn dieses shice highlighting sonst ?berall gemacht???
  12. c*********c

    kA, gibt's dazu keinen anderen Weg?
  13. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    $muster[] = "/\[php\](.*?)\[\/php\]/ies";
    $ersetzen[] = "phpcode('\\1')";

    Hmm so funktioniert es jetzt wenigstens mit der variable. Also ich ?bergebe das ganze an eine Funktion in der dann der Text gehighlightet wird, aber irgendwie habe ich das Problem, dass da dann lauter HTML-Befehle stehen...
  14. c*********c

    Zeig mal den Code!
  15. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    Wunder dich nicht, denn es ist ein bissl chaotisch und ich werde es auch noch anders l?sen.

    function phpcode($code) {
    $html = highlight_string($code, true);
    $html = str_replace("\n", "", $html);
    $rows = explode("<br />", $html);
    $row_num = array();
    $ii = array();
    $i = 1;

    foreach($rows as $row) {
    if($i < 10) {
    $i = "0".$i;
    }
    $temprow = "$row\n";
    $temprow = ereg_replace(
    "([a-z,_]+) *</font><font color=\"#007700\">\(",
    "<a href=\"http://www.php.net/\\1\" target=\"blank\">\\1</a></font><font color=\"#007700\">(",
    $temprow);
    $row_num[]=ereg_replace(
    "function </font><font color=\"#0000BB\"><a href=\"http://www.php.net/([a-z,_]+)\" target=\"blank\">([a-z]+)</a>"
    ,"function </font><font color=\"#0000BB\">\\1",
    $temprow);
    $ii[]=$i;
    $i++;
    }
    $iii=($i-1)*11;

    return "<div>"
    ."<table style=\"border:0px #000000 solid\" cellspacing=0 cellpadding=0 height=1><tr>"
    ."<td width=\"40\" valign=\"bottom\" align=\"left\"></td><td width=\"*\" valign=\"top\" align=\"left\">"
    ."<pre>".implode($row_num)."\n </pre></td></tr></table></div>"
    .'<div style="position:absolute; left:0px;top:0px; width:20px;z-index:1; border-right:1px solid black;">'
    .'<table style="border:0px #000000 solid" cellspacing=0 cellpadding=0 height=1><tr>'
    .'<td width="*" valign="top" align="left"><pre>'.implode("\n",$ii).'</pre> </td></tr></table></div>';
    }


    function text($text) {
    if (is_array ($text)) { // Pr?fen, ob der Parameter ein Array ist
    foreach ($text as $key => $value) { // wenn ja, Wert und Inhalt auslesen und diese Funktion mit dem Inhalt als Parameter wieder aufrufen
    $bbcode[$key] = text($value);
    }
    } else { // wenn der ?bergebene Parameter kein Array ist

    $text = stripslashes($text); // ?berfl?ssige Backslahes entfernen
    $text = htmlentities($text); //HTML-Code entfernen
    $text = nl2br ($text); //Zeilenumbruecheumwandeln

    $muster = array ();
    $ersetzten = array ();

    $muster[] = "/\[br\]/Usi";
    $ersetzen[] = '<br />';

    $muster[] = "/\[hr\]/Usi";
    $ersetzen[] = '<hr />';

    $muster[] = "/\[b\](.*)\[\/b\]/Usi";
    $ersetzen[] = '<b>\1</b>';

    $muster[] = "/\[u\](.*)\[\/u\]/Usi";
    $ersetzen[] = '<u>\1</u>';

    $muster[] = "/\[i\](.*)\[\/i\]/Usi";
    $ersetzen[] = '<i>\1</i>';

    $muster[] = "/\[h1\](.*)\[\/h1\]/Usi";
    $ersetzen[] = '<h1>\1</h1>';

    $muster[] = "/\[h2\](.*)\[\/h2\]/Usi";
    $ersetzen[] = '<h2>\1</h2>';

    $muster[] = "/\[h3\](.*)\[\/h3\]/Usi";
    $ersetzen[] = '<h3>\1</h3>';

    $muster[] = "/\[h4\](.*)\[\/h4\]/Usi";
    $ersetzen[] = '<h4>\1</h4>';

    $muster[] = "/\[h5\](.*)\[\/h5\]/Usi";
    $ersetzen[] = '<h5>\1</h5>';

    $muster[] = "/\[h6\](.*)\[\/h6\]/Usi";
    $ersetzen[] = '<h6>\1</h6>';

    $muster[] = "/\[quote\](.*)\[\/quote\]/Usi";
    $ersetzen[] = '<div class="quote">Zitat: <br \>\1</div>';

    $muster[] = "/\[li\](.*)\[\/li\]/Usi";
    $ersetzen[] = '<li>\1</li>';

    $muster[] = "/\[ul\](.*)\[\/ul\]/Usi";
    $ersetzen[] = '<ul>\1</ul>';

    $muster[] = "/\[php\](.*?)\[\/php\]/ies";
    $ersetzen[] = "phpcode('\\1')";

    $muster[] = "/\[code\](.*)\[\/code\]/Usi";
    $ersetzen[] = '<blockquote><div class="pre">Code:<br>\1<hr noshade></div></blockquote>';

    $muster[] = "/\[pre\](.*)\[\/pre\]/Usi";
    $ersetzen[] = '<div class="pre">\1</div>';

    //SMILIES
    $sql = "SELECT code,name FROM smilies";
    $result = mysql_query($sql);

    while($row = mysql_fetch_assoc($result))
    {
    $muster[] = "/".addcslashes(addcslashes($row['code'], "("), ")" )."/i";
    $ersetzen[] = "<img src=\"images/smilies/".$row["name"].".gif\" />";
    }

    $text = preg_replace ($muster, $ersetzen, $text);


    //Aus http://url wird [URL]http://url[/URL]
    $urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
    $urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";

    $urlreplace[]="\\1[URL]\\2\\4[/URL]";
    $urlreplace[]="[URL]\\1\\3[/URL]";

    //Aus klaus@mustermann.de wird [EMAIL]klaus@mustermann.de [/EMAIL]
    $emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
    $emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

    $emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";

    $emailreplace[]="[EMAIL]\\0[/EMAIL]";
    $text = preg_replace($urlsuch, $urlreplace, $text);
    if (strpos($text, "@"))
    {
    $text = preg_replace($emailsuch, $emailreplace, $text);
    }

    //Die URL's werden zu Links
    $text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);

    $text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);

    $text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);

    $text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);

    //E-Mail Adressen werden zu links
    $text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1", $text);

    $text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);

    //bild.jpg wird als Bild angezeigt
    $text = preg_replace("/\[IMG\](.*?)\[\/IMG\]/si", "<img src=\"\\1\" border=\"0\">", $text);


    }
    return $text; // das ganze zur?ckgeben
    }


    Au?erdem bin ich jetzt weg und komm erst in 2,5 Stunden wieder... ;D

    EDIT: Mit [ code ] geht es nicht.... -.- deswegen habe ich es so gemacht.

    Beitrag ge?ndert am 1.10.2005 21:25 von i-spacke
  16. Wie gew?hnlich, ignoriere ich solche Quelltextmengen und versuche einfach mal zu vermuten, was du erreichen willst:

    Geht es dir darum, den Quelltext einzuf?rben und dann in einer Variablen zu speichern?


    Dann machst du das so:

    $alter_quelltext = '.....';

    $bunter_quelltext = highlightstring($alter_quelltext, TRUE);

    Jetzt hast du in der Variablen $bunter_quelltext den "gehighlighteten" PHP-Quelltext. Der zus?tzliche Parameter TRUE (oder 1) ist auf der deutschsprachigen Seite des PHP-Manuals immer noch nicht aufgef?hrt. Er funktioniert aber.

    Und wenn du den Quelltext zwischen die <pre></pre>-Tags packst, dann solltest du nl2br() weglassen, sonst sehen die Quelltexte dann aus wie hier im Lima-Forum.

    MfG
    alopex
  17. c*********c

  18. c*********c

    Naja, wenigstens funktioniert's jetzt:
    http://compactdisc.pyrokar.lima-city.de/highlight_string.txt
    und
    http://compactdisc.pyrokar.lima-city.de/highlight_string.php

  19. Was bewirkt der letzte Parameter?


    Er bewirkt, dass highlight_string() nicht in den Ausgabepuffer sondern in eine Variable schreibt. So ?hnlich wie bei print_r("blubb", 1). Leider schweigt sich das deutsche PHP-Manual immer noch dazu aus. :slant:

    Auf der englischen Seite steht es aber erkl?rt:
    http://de.php.net/manual/en/function.highlight-string.php

    If the second parameter return is set to TRUE then highlight_string() will return the highlighted code as a string instead of printing it out.

    If the second parameter is not set to TRUE then highlight_string() will return TRUE on success, FALSE on failure.


    MfG
    alopex
  20. Autor dieses Themas

    i-spacke

    Kostenloser Webspace von i-spacke

    i-spacke hat kostenlosen Webspace.

    Es ging mir eigentlich darum, dass ich nicht genau wusste wie ich es anstellen kann das ich quasi in preg_replace die funktion aufrufe und den zu ersetzenden text als Parameter ?bergebe.

    $muster[] = "/[php](.*?)[/php]/ies";
    $ersetzen[] = "highlightstring('\1', TRUE)";

    Geht es so? Hab leider grad keine Zeit um es auszuprobieren.
  21. Wenn schon, dann so:

    $muster[] = '/[php](.*?)[/php]/ies';
    $ersetzen[] = 'highlightstring($1, TRUE)';

    Wenn du die beiden Array-Eintr?ge sp?ter mit preg_replace() verarbeiten willst. W?rde ich mal so sagen.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!