kostenloser Webspace werbefrei: lima-city


Forum BB Code Problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    Ich programmiere zurzeit ein Forum.

    Für die BB Codes habe ich folgende Methode:

    function bb_codes($bbcode) {
    	$bbcode = htmlentities ( $bbcode );
    	
    	/* Bold text */
    	$match ["b"] = "/\[b\](.*?)\[\/b\]/is";
    	$replace ["b"] = "<b>$1</b>";
    	
    	/* Italics */
    	$match ["i"] = "/\[i\](.*?)\[\/i\]/is";
    	$replace ["i"] = "<i>$1</i>";
    	
    	/* Underline */
    	$match ["u"] = "/\[u\](.*?)\[\/u\]/is";
    	$replace ["u"] = "<span style=\"text-decoration: underline\">$1</span>";
    	
    ...
    	
    	/* Parse */
    	$bbcode = preg_replace ( $match, $replace, $bbcode );
    	
    	$bbcode = nl2br ( $bbcode );
    	
    	$bbcode = preg_replace_callback ( "/\[code\](.*?)\[\/code\]/ism", "pre_special", $bbcode );
    	
    	return $bbcode;
    }
    function pre_special($matches) {
    	$prep = preg_replace ( "/\<br \/\>/", "", $matches [1] );
    	return "<pre><code>$prep</code></pre>";
    }


    Ich möchte nun noch, dass der Code außerhalb von [ code ] und [ /code ] mit wordwrap() behandelt wird. Das habe ich so versucht:

    $bbcode = wordwrap($bbcode, 100, "<br />\n");


    Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.

    Wie könnte ich das lösen?

    Beitrag zuletzt geändert: 7.1.2013 20:10:36 von php-oop
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. ich sehe viele lösungsansätze: zeichenweise, regular expressions, arrays usw.

    gute ideen findet man zb unter:
    php.net > wordwrap > user contibuted notes
  4. php-oop schrieb:

    Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.

    Wie könnte ich das lösen?


    Hast du schon mal überlegt, ob du vielleicht den falschen Ansatz hast? Du möchtest etwas grafisch darstellen. Benutzt dazu aber php. Ich denke hier wäre aber html deine Lösung. Einfach mit nem <p> umschließen oder meinetwegen auch blockquote ^^ Den Text, nachdem der wordwrap passieren soll.
  5. mit strpos() kannst du nicht nur feststellen ob, sondern auch wo [code] & [/code] auftauchen.

    du könntest zb deren positionen per schleife über den neuen eintrag in ein array speichen.
    gibts keine, bist du fertig.

    in einer 2. schleife über dieses array lässt sich wordwrap() dann auf den teil vom vorigen [/code] (bzw. 0) bis zum nächsten [code] anzuwenden und zwischen diesen tags nicht. nach dem letzen [/code] bis zum ende des eintrags noch ein letztes wordwrap(), voila.
  6. h***e

    php-oop schrieb:
    Ich programmiere zurzeit ein Forum.

    Für die BB Codes habe ich folgende Methode:

    function bb_codes($bbcode) {
    	$bbcode = htmlentities ( $bbcode );
    	
    	/* Bold text */
    	$match ["b"] = "/\[b\](.*?)\[\/b\]/is";
    	$replace ["b"] = "<b>$1</b>";
    	
    	/* Italics */
    	$match ["i"] = "/\[i\](.*?)\[\/i\]/is";
    	$replace ["i"] = "<i>$1</i>";
    	
    	/* Underline */
    	$match ["u"] = "/\[u\](.*?)\[\/u\]/is";
    	$replace ["u"] = "<span style=\"text-decoration: underline\">$1</span>";
    	
    ...
    	
    	/* Parse */
    	$bbcode = preg_replace ( $match, $replace, $bbcode );
    	
    	$bbcode = nl2br ( $bbcode );
    	
    	$bbcode = preg_replace_callback ( "/\[code\](.*?)\[\/code\]/ism", "pre_special", $bbcode );
    	
    	return $bbcode;
    }
    function pre_special($matches) {
    	$prep = preg_replace ( "/\<br \/\>/", "", $matches [1] );
    	return "<pre><code>$prep</code></pre>";
    }


    Ich möchte nun noch, dass der Code außerhalb von [ code ] und [ /code ] mit wordwrap() behandelt wird. Das habe ich so versucht:

    $bbcode = wordwrap($bbcode, 100, "<br />\n");


    Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.

    Wie könnte ich das lösen?


    Du weißt schon das du den Server extrem auslastest und das macht den Script langsamer!
    Benutze für replace ein array, der Code wird somit schneller verarbeitet und lastet den server nicht so aus!

    Beitrag zuletzt geändert: 16.1.2013 21:57:44 von hpage
  7. arrays zu verwenden halte ich für eine gute idee,
    function BB($s) {# lässt sich leicht um img, code, italic usw. ergänzen
    # s:zu postender string, P:pattern=suchmuster, R:replacement=ersatz
      $P=array('\[b\](.*?)\[\/b\]\', '\[url\=(.*?)\](.*?)\[\/url\]\');
      $R=array('<b>\\1</b>', '<a href="\\1">\\2</a>');
      return preg_replace($P,$R,$s); }
    oder so ähnlich.
  8. 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!