ilch Forum » Allgemein » HTML, PHP, SQL,... » Großes Problem

Geschlossen
  1. #1
    User Pic
    Arminpollak Mitglied
    Registriert seit
    05.03.2018
    Beiträge
    2
    Beitragswertungen
    0 Beitragspunkte
    Hallo Miteinander.

    Ich bin absoluter Anfänger und habe nun ein großes Problem.
    Ich habe nun zwar schon einiges gelesen, jedoch ist das allermeiste für mich absolut chinesisch.
    Seit neuesten bekomme ich ddiesen fehler:

    Warning: preg_replace_callback(): Requires argument 2, 'Array', to be a valid callback in /mnt/web215/e1/76/53639476/htdocs/cgi-data/ilch/include/includes/func/bbcode.php on line 236


    Im Vorfeld habe ich "preg_replace" durch "Preg_replace_callback" im BBCode ersetzt.

    Hier nun der Gesamte BBCODE:
    <?php 
    #   Copyright by Manuel
    #   Support www.ilch.de
    
    
    defined ('main') or die ( 'no direct access' );
    function BBcode($s,$maxLength=40) {
      #$s = unescape($s);
    	
      $coTime = str_replace(' ', '', microtime());
    	preg_match_all('/\[code\](.+)\[\/code\]/Uis',$s,$result);
      
      $s = bbcode_code_start ($s, $coTime, $result);
      
      # bbcode einheitlicher machen zum bessern pruefen.
      $s = bbcode_simple_prev ($s);
      
      #$s = preg_replace_callback ("/(\015\012|\015|\012)/", " \\1", $s);
      
      # autoumbruch nach x zeichen
      #$s = bbcode_autonewline($s, $coTime, $maxLength);
      
      $s = htmlentities($s);
      
      # speziell bilder
      $s = bbcode_images ($s);
      
      # speziell zitate ersetzten.
      $s = bbcode_quote ($s);
      
      # replace simple
    	$s = bbcode_simple ($s);
      
    	# smilies umwandeln
    	$s = bbcode_smiles ($s);
    	
      $s = preg_replace_callback ("/\015\012|\015|\012/", "\n<br />", $s);
      
      # code zurueck ersetzten
      $s = bbcode_code_end ($s, $coTime, $result);
    	
    	return ($s);
    }
    
    # diese funktion ist etwas komplizierter. und zwar wird hier versucht
    # dem problem beizukommen das immer irgendwelche spassvoegel sehr lange
    # texte schreiben die dann das design verzerren. dagegen hilft nur der
    # automatische umbruch. ich habe mir dafuer ausgedacht es gibt
    # bestimmte zeichen ab dennen die kontrolle total aus ist (url, img)
    # und es gibt zeichen ab dennen die kontrolle wieder eingeschaltet wird
    # ausserdem gibt es zeichen ab dennen wieder von vorn angefangen wird
    # zu zahlen, wird der counter erreicht wird ein leerzeichen eingefueght.
    function bbcode_autonewline ($s, $coTime,$maxLength) {
      $neu_s = '';
      
      $ar_start = array (
        '[url=http://',
        '[img]'
      );
      
      $ar_ende = array (
        ']',
        '[/img]'
      );
      
      $ar_neu = array (
        ' ',
      );
      
      $ar_next = array (' ',"\n","\r",'[/url]','[b]','[/b]','[i]','[/i]','[u]','[/u]',$coTime,'[list]','[/list]','[*]');
      
      $count   = TRUE;
      $countgr = null;
      $counter = -1;
      
      $a = strlen ($s);
      for ($i=0;$i<$a;$i++) {
        # counter raus / rein
        if ($count == TRUE) {
          foreach ($ar_start as $sk => $sv) {
            if ($s{$i} == substr($sv, 0, 1) AND preg_match("/^".preg_quote($sv, '/')."/", substr($s, $i))) {
              $count   = FALSE;
              $countgr = $sk;
              $counter = 0;
              #echo '<h1>ON</h1>';
              break;
            }
          }
        } elseif ($count == FALSE AND $s{$i} == substr($ar_ende[$countgr], 0, 1) AND preg_match("/^".preg_quote($ar_ende[$countgr], '/')."/", substr($s, $i))) {
          #echo '<h1>||'. $s{$i} .'||<br>||'.substr($s, $i, 10).'||<br>';
          #echo 'OFF</h1>';
          $count   = TRUE;
          $counter = -2;
          $countgr = null;
        }
     
        if ($count == TRUE) {
          $counter++;
        
          # ar neu?
          foreach ($ar_neu as $v) {
            if ($count == TRUE AND $s{$i} == substr($v, 0, 1) AND preg_match ("/^".preg_quote($v)."/", substr($s, $i))) {
              $counter = -3;
              break;
            }
          }
          
          # springen
          foreach ($ar_next as $v) {
            if ($s{$i} == substr($v, 0, 1) AND preg_match("/^".preg_quote($v, '/')."/", substr($s, $i))) {
              $i = $i + strlen ($v) - 1;
              $springen = true;
              $valSprin = $v;
              break;
            }
          }
          if (isset($springen) AND $springen === true) {
            $neu_s .= $valSprin;
            $springen = false;
            $valSprin = null;
            continue;
          }
        
        
          if ($counter >= $maxLength) {
            $neu_s  .= ' ';
            $counter = 0;
          }
        }
        
        $neu_s .= $s{$i};
      }
      
      /*
      $s = str_replace('</a>', ' </a>', $s);
      $lines = explode(' ',$s);
      
    	$ntxt = '';
    	foreach ($lines as $v) {
    	  if ( strpos($v,$coTime) === FALSE AND strpos ($v, 'src="') === FALSE AND strpos ($v, 'href="') === FALSE AND strpos ($v, '</table>') === FALSE) {
    		  $ntxt .= chunk_split($v, $maxLength, ' ').' ';
        } else {
    		  $ntxt .= $v.' ';
    		}
    	}
    	$s = $ntxt;
      $s = str_replace(' </a>', '</a>', $s);
      */
      return($neu_s);
    }
    
    function bbcode_images ($s) {
      global $allgAr;
      
      preg_match_all('/\[img\](http|https):\/\/([^\ \?&=\#\"\n\r\t<>]+)\.(gif|jpeg|jpg|png)\[\/img\]/Ui',$s,$imgRs);
      
    	$max_breite = 0;
    	if (isset($allgAr['allg_bbcode_max_img_width'])) {
        $max_breite = $allgAr['allg_bbcode_max_img_width'];
    	}
      $endung = array (1 => 'gif', 2 => 'jpg', 3 => 'png');
      
      if ( isset ($imgRs[0][0]) ) {
        for($i=0;$i<count($imgRs[0]);$i++) {
      	  $imgstr = $imgRs[1][$i].'://'.$imgRs[2][$i].'.'.$imgRs[3][$i];
          $size   = @getimagesize($imgstr);
    			$breite = $neueBreite = $size[0];
          $hoehe  = $neueHoehe  = $size[1];
          $er     = '';
          if (isset($endung[$size[2]]) OR !is_array($size)) {
            $er = '<img style="border: none;" src="'.$imgstr.'" />';
            if ( $breite > $max_breite ) {
              $neueHoehe  = intval($hoehe*$max_breite/$breite);
              $neueBreite = $max_breite;
              $er = '<a href="'.$imgstr.'" target="_blank"><img height="'.$neueHoehe.'" width="'.$neueBreite.'" style="border: none;" src="'.$imgstr.'" /></a>';
            }
          } 
          $s = str_replace($imgRs[0][$i],$er,$s);
        }
      }
      return($s);
    }
    
    function bbcode_quote ($s) {
     	$tpl = new tpl ( 'zitatreplace.htm' );
    	$header1_quote = $tpl->get(0);
    	$header2_quote = $tpl->get(1);
    	$footer1_quote = $tpl->get(2);
    	unset($tpl);
      $i=0;
      while(strpos($s,"[/quote]")!==FALSE AND $i < 5 ) {
        $i++;
        $s = preg_replace_callback ("#\[quote\=([^\]]*)\](.*)\[\/quote\]#Uis",$header1_quote."geschrieben von \\1".$header2_quote."\\2".$footer1_quote, $s);
        $s = preg_replace_callback ("/\[quote\](.*)\[\/quote\]/Usi", $header1_quote.$header2_quote."\\1".$footer1_quote, $s );
      }
      return ($s);
    }
    
    function bbcode_simple_prev ($s) {
      $search = array (
        "/(^|[^=\]\>\"])http:\/\/(www\.)?([^\s\"\<\[]*)/i",
        "/\[url\]http:\/\/(www\.)?(.*?)\[\/url\]/si",
      );
      
    	$replace = array (
        "\\1[url]http://\\2\\3[/url]",
        "[url=http://\\1\\2]\\2[/url]",
    	);
    						
    	$s = preg_replace_callback ($search, $replace, $s);
      return ($s);
    }
    
    function bbcode_simple ($s) {
      $page = preg_quote(dirname(str_replace('www.','',$_SERVER["HTTP_HOST"]).$_SERVER["SCRIPT_NAME"]), '/');
      $search = array (
        "/\[b\](.*?)\[\/b\]/si",
        "/\[i\](.*?)\[\/i\]/si",
        "/\[u\](.*?)\[\/u\]/si",
        "/\[url=http:\/\/(www\.)?(".$page.")(.*?)](.*?)\[\/url\]/si",
        "/\[url=http:\/\/(www\.)?(.*?)\](.*?)\[\/url\]/si",
        "/\[list(=1)?\](.+)\[\/list\]/Usie",
        "/(script|about|applet|activex|chrome):/is",
      );
      
    	$replace = array (
        "<b>\\1</b>",
        "<i>\\1</i>",
        "<u>\\1</u>",
        "<a href=\"http://\\1\\2\\3\">\\4</a>",
        "<a href=\"http://\\1\\2\" target=\"_blank\">\\3</a>",    
        "bbcode_simple_list ('\\1', '\\2')",
        "\\1&#058;",
    	);
    						
    	$s = preg_replace_callback($search, $replace, $s);
      return ($s);
    }
    
    function bbcode_simple_list ($w, $s) {
    #  $s = preg_replace_callback ("\015\012
      $s = preg_replace_callback("/\[\*\]([^\[]+)/ies", "'<li>'.trim('\\1').'</li>'", trim($s));
      if ($w == '=1') {
        return ('<ol>'.trim($s).'</ol>');
      }
      
      return ('<ul>'.trim($s).'</ul>');
    }
    
    function bbcode_smiles ($s) {
      global $global_smiles_array;
      if (!isset($global_smiles_array)) {
        $global_smiles_array = array();
        $erg = db_query("SELECT ent, url, emo FROM `prefix_smilies`");
    	  while ($row = db_fetch_object($erg) ) {
    		  $global_smiles_array[$row->ent] = $row->emo.'#@#-_-_-#@#'.$row->url;
    	  }
      }
      foreach ($global_smiles_array as $k => $v) {
        list($emo, $url) = explode('#@#-_-_-#@#', $v);
        $s = str_replace($k,'<img src="include/images/smiles/'.$url.'" border="0" alt="'.$emo.'" title="'.$emo.'" />',$s);
      }
      return ($s);
    }
    
    function bbcode_code_start ($s, $coTime, $result) {
    	for ($i=0;$i<count($result[1]);$i++) 	{
    		if ($result[0][$i]) {
    		  $s = str_replace ($result[0][$i],'#'.$coTime.'#'.$i.'#'.$coTime.'#',$s);
    		}
    	}
      return ($s);
    }
    
    function bbcode_code_end ($s, $coTime, $result) {
    	$tpl = new tpl ( 'codereplace.htm' );
    	for ($i=0;$i<count($result[1]);$i++) {
    		if ($result[1][$i]) {
    			ob_start();
    			#$result[1][$i] = str_replace ('&lt;', '<', str_replace('&gt;', '>', $result[1][$i]));
          #$codereplace = highlight_string(trim($result[1][$i]), 1);
    			highlight_string(trim($result[1][$i]));
    			$codereplace = ob_get_contents();
    			ob_end_clean();
    			$newstring = $tpl->set_get ( 'CODEREPLACE', $codereplace, 0);
    			$s = str_replace('#'.$coTime.'#'.$i.'#'.$coTime.'#',$newstring,$s);
    		}
    	}
    	unset($tpl);
      return ($s);
    }
    ?>




    Wäre Weltklasse, wenn mir hier jemand weiterhlefen könnte.

    Vielen Dank vorab

    betroffene Homepage: externer Link[/url]


    Zuletzt modifiziert von Nex4T am 05.03.2018 - 12:39:51
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Das Ersetzen von "preg_replace" durch "Preg_replace_callback" geht nicht ganz so einfach.

    Ich habe dies aber schon gemacht, kannst du dir hier ansehen: github.com/IlchCMS/Ilch-1.1/blob/1.1q/include/includes/class/bbcode.php

    Ich hab auch etwas mehr gemacht, hier kannst du dir die einzelnen Änderungen ansehen: github.com/IlchCMS/Ilch-1.1/commit/f1ff3064f9068c4a9efd24e9914542e35bd999e9


    Zuletzt modifiziert von Mairu am 06.03.2018 - 08:21:44
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Arminpollak Mitglied
    Registriert seit
    05.03.2018
    Beiträge
    2
    Beitragswertungen
    0 Beitragspunkte
    Hi,

    Zunächst vielen Dank für deine Antwort, jedoch habe ich, seit nun fast 10 Jahren nicht mehr viel mit diesem Zeug am Hut und somit sagt mir das alles nicht viel, bzw. so gut wie gar nichts.

    gibt es eventuell eine Erklärung für blödis? Die Hp funktioniert ja eigentlich, jedoch stört mich diese Fehlermeldung. Gibt es eventuell ne Möglichkeit die Meldung auszublenden?

    Andernfalls bräuchte ich ne Erklärung für blöde zunge

    Vielen Dank vorab.
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    J99*Himmelhund Mitglied
    Registriert seit
    09.02.2014
    Beiträge
    30
    Beitragswertungen
    0 Beitragspunkte
    Hallo,
    geht mir genauso. Die vielen Links aus den unterschiedlichen Beiträgen "ilch1 -> php7" zu github verwirren mich total. Welche Variante ist aktuell. Was kann man wie anwenden? verletzt
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten