AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PREG funktioniert nur lokal

Ein Thema von CalganX · begonnen am 13. Jun 2004 · letzter Beitrag vom 13. Jun 2004
Antwort Antwort
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
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2

Re: PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:11
Zitat von Chakotay1308:
Woran kann es jetzt also liegen, dass PHP auf meinem lokalen Webspace alles richtig macht, online jedoch keinerlei Zeilenumbrüche vornimmt?
Ich habe mir den Source jetzt nicht angesehen, aber das klingt stark danach, dass du vergessen hast, dass auf Windowssystemen \r\n ein Zeilenumbruch ist, auf Unixsystemen aber nur \n. Wenn du deine Sourcefiles im Textmodus per FTP hochlädst, dann werden diese automatisch transformiert, dein Script erwartet aber wahrscheinlich trotzdem \r\n-Zeilenumbrüche, die es nicht gibt.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
CalganX

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

Re: PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:13
Hi,
hm... mir würde jetzt nicht einfallen, wo ich das beachte. Wenn du mir kurz erklären könntest, wie ich das ändern muss.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4

Re: PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:45
Ich hab mich wohl geirrt. Auf meinem System funktioniert es weder mit einem durch '\n' noch mit einem durch '\r\n' umgebrochenen String (GNU/Linux mit PHP 4.3.6).
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
CalganX

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

Re: PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:48
Hi,
lokal: PHP 4.3.4
online: PHP 4.3.1


Chris
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6

Re: PREG funktioniert nur lokal

  Alt 13. Jun 2004, 16:56
Daran muss es nicht liegen. Ich habe auf bugs.php.org/ keinen entsprechenden Bug gefunden und auch im Manual bei preg_replace() findet sich kein Hinweis, dass sich was geändert haben könnte. Und wie gesagt, bei mir mit PHP 4.3.6 funktioniert es nicht.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz