Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:04
Hi,
ich rege mich gerade zum fünftausends Mal über Regular Expressions bei PHP auf.
Das Problem ist folgendes: auf dieser Seite sieht man, dass der SourceCode keinerlei Umbrüche hat. Bei mir auf dem Localhost funktioniert jedoch alles problemlos.
Dort wird alles korrekt umgebrochen.

Ich parse so die Datei für die Ausgabe:
Code:
   foreach($lines as $line) {   

      if (strpos($line, "<body") !== false) {
         $print = true;
      } elseif (strpos($line, "</body>") !== false) {
         $print = false;
      } elseif ($print) {

         if (preg_match("|###include \"(.*?)\" \/###|is", $line)) {
            $line = preg_replace("|###include \"(.*?)\" \/###|is", "require \"".$cwd."/scripts/siteincludes/\\1\";", $line);

            eval($line);
         } elseif(preg_match("|###variable \"(.*?)\" \/###|is", $line)) {
            $line = preg_replace("|###variable \"(.*?)\" \/###|is", "echo \\1;", $line);
            
            eval($line);
         } elseif(preg_match("|###setvar \"(.*?)\" \"(.*?)\" \/###|is", $line)) {
            $line = preg_replace("|###setvar \"(.*?)\" \"(.*?)\" \/###|is", "\\1 = \"\\2\";", $line);
            
            eval($line);
         } else {
//            $line = preg_replace("|\w\<a href=\"\w(\&)\w\"\>\w|is", "\&amp;", $line);
   
            print $line;
         }
         
      }
($lines ist das Array mit dem Inhalt der zu parsenden Datei)

Das Problem ist jedoch in meinen selbst gebauten BBCodes:
Code:
   function parseBBCode($text, $urls = true) {
      global $wrkdir;
       $match = array();
      $replace = array();
      
      if ($urls) {
         // matches [url]http://www.csd-software.net[/url]
         $match[]    = '#(^|[\n ])([\w]+?://(.*?)[^ \t\n\r<"]*)#ie';
         $replace[]    = "'\\1<a href=\"\\2\" target=\"_blank\">' . ((strlen('\\2') > 40) ? substr('\\2', 0, 20) . ' ... ' . substr('\\2', -20) : '\\2') . '</a>'";

         // matches [url]www.csd-software.net[/url]
         $match[]    = '#(^|[\n ])((www|ftp)(.*?)[^ \t\n\r<"]*)#ie';
         $replace[]    = "'\\1<a href=\"http://\\2\" target=\"_blank\">' . ((strlen('\\2') > 40) ? substr('\\2', 0, 20) . ' ... ' . substr('\\2', -20) : '\\2') . '</a>'";
      }

      // matches [url]http://www.csd-software.net[/url]
      $match[]    = '#\[url\](.*?)\[\/url\]#ie';
      $replace[]   = "'<img src=\"".$wrkdir."images/link.gif\" border=\"0\"> <a href=\"\\1\" target=\"_blank\">' . ((strlen('\\1') > 40) ? substr('\\1', 0, 20) . ' ... ' . substr('\\1', -20) : '\\1') . '</a>'";
      
      // matches [url=http://www.csd-software.net]Text[/url]
      $match[]    = '#\[url=(.*?)\](.*?)\[\/url\]#i';
      $replace[]   = '<img src=\"'.$wrkdir.'images/link.gif\" border=\"0\"> [url="\\1"]\\2[/url]';
      
      // matches [b]Text[/b]
      $match[]   = '#\[b\](.*?)\[\/b\]#i';
      $replace[]   = '[b]\\1[/b]';

      // matches [i]Text[/i]
      $match[]   = '#\[i\](.*?)\[\/i\]#i';
      $replace[]   = '[i]\\1[/i]';

      // matches [u]Text[/u]
      $match[]   = '#\[u\](.*?)\[\/u\]#i';
      $replace[]   = '<u>\\1</u>';
      
      // matches [quote=From]Quotation[/quote]
      $match[]   = '#\[quote=(.*?)\]((.|\n)*?)\[\/quote\]#i';
      $replace[]   = '<p class="QuoteTitle">[size="1"][b]\\1:[/b][/size]</p><p class="QuoteText">\\2</p>';

      // matches [quote]Quotation[/quote]
      $match[] = '#\[quote\]((.|\n)*?)\[\/quote\]#i';
      $replace[]   = '<p class="QuoteTitle">[size="1"][b]Zitat:[/b][/size]</p><p class="QuoteText">\\1</p>';
      
      // matches [code]SourceCode
$match[] = '#\[code\]((.|\n)*?)\[\/code\]#ie';
$replace[] = "'<p class=\"QuoteTitle\">[size="1"]Code:[/size]</p><pre class=\"SourceText\">' . br2nl(stripslashes('\\1')) . '</pre>'";

// matches PHP-SourceCode $match[] = '#\[php\]((.|\n)*?)\[\/php\]#ie';
$replace[] = "'<p class=\"QuoteTitle\">[size="1"]Code:[/size]</p><p class=\"SourceText\">' . highlight_string(stripslashes(br2nl('\\1')),true) . '</p>'";


$text = preg_replace($match, $replace, $text);

return $text;
}


// und noch die Funktion für den Umbruch
function br2nl($text) {
$match = '#(^|[\n ])<br(.*?)>[^ \t\n\r<"]#ie';
$replace = '\n';

$ret = preg_replace($match, $replace, $text);

return $ret;
}[/code]
Woran kann es jetzt also liegen, dass PHP auf meinem lokalen Webspace alles richtig macht, online jedoch keinerlei Zeilenumbrüche vornimmt?

Chris
  Mit Zitat antworten Zitat