eregi ersetzen

Alles, was PHP betrifft, kann hier besprochen werden.

eregi ersetzen

Postby Incognito » 15. September 2011 20:09

Die Funktion eregi ist ja etwas veraltet.

Aus diesem Grund möchte ich ein altes Script ersetzen.

Ich hab es schon mit preg_replace versucht, bekomme es aber nicht hin.

Es geht um diese paar Zeilen Code.

Code: Select all
if ( $_REQUEST['id'] ) $thetext=eregi_replace("\[mehr\]","",$res['text']);
      else {
         if ( eregi("\[mehr\]",$res['text']) ) {
         list($thetext)=explode("[MEHR]",eregi_replace("\[mehr\]","[MEHR]",$res['text']));
         $addmehr=true;
         }
         else $thetext=$res['text'];
      }

      if ( $this->set['usehtml'] && eregi("[html]",$thetext) && eregi("[/html]",$thetext) )


Hat jemand nen Tipp für mich.
Incognito
 
Posts: 33
Joined: 21. February 2004 15:20
Operating System: Windows 7

Re: eregi ersetzen

Postby glitzi85 » 15. September 2011 20:30

Eigentlich recht simpel, einfach die Funktionen tauschen und das Pattern anpassen. Für eregi_replace nimmst du preg_replace und für eregi preg_match_all.
Code: Select all
$thetext = preg_replace('/\[mehr\]/i', '', $res['text']);

Das i macht das ganze Case-Insensitive. Ohne das i entspräche das ganze der Funktion ereg_replace.

Die zwei Schrägstiche am Anfang und Ende sind die Delimiter. Da kann man auch andere Zeichen nehmen, Schrägstrich ist halt recht gängig. Wenn du einen Schrägstrich im Pattern hast, muss das natürlich mit \ maskiert werden:
Code: Select all
'/\[\/html\]/i'


mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: eregi ersetzen

Postby Incognito » 16. September 2011 09:56

Danke für deine Hilfe und die ausführliche Erklärung. Ich wusste, dass es hier Experten für das Thema gibt. :D

Ich werde das heute Abend mal im Script ausprobieren und das Ergebnis dann hier posten.
Incognito
 
Posts: 33
Joined: 21. February 2004 15:20
Operating System: Windows 7

Re: eregi ersetzen

Postby Incognito » 16. September 2011 14:37

So, hier ein Feedback...

eregi_replace ist raus

Mit preg_match_all komm ich gerade nicht weiter, weil 3 Paramter erwartet werden.

So sieht der geänderte Teil bis jetzt aus.

Code: Select all
if ( $_REQUEST['id'] ) $thetext=preg_replace("/\[mehr\]/i","",$res['text']);
      else {
         if ( eregi("\[mehr\]",$res['text']) ) {
         list($thetext)=explode("[MEHR]",preg_replace("/\[mehr\]/i","[MEHR]",$res['text']));
         $addmehr=true;
         }
         else $thetext=$res['text'];
      }

      if ( $this->set['usehtml'] && eregi("[html]",$thetext) && eregi("[/html]",$thetext) ) {


Ist wahrscheinlich nur ne Kleinigkeit...
Incognito
 
Posts: 33
Joined: 21. February 2004 15:20
Operating System: Windows 7

Re: eregi ersetzen

Postby glitzi85 » 16. September 2011 15:20

Ah ja, das Problem hatte ich auch schon. In der Doku steht der dritte Parameter als Optional drin, aber das ist erst seit PHP 5.4.0 der Fall.
preg_match_all hat als Rückgabewert nur int, nämlich die Anzahl der gefundenen Matches. Falls du die matches selber benötigst, kannst du eine Variable als dritten Parameter angeben, welche dann mit den Ergebnissen gefüllt wird. Wenn du die Funktion nur zum suchen verwendest, dann gib da einfach irgendeine undefinierte Variable an, ich verwende da $foo für:
Code: Select all
if ( $this->set['usehtml'] && preg_match_all("/\[html\]/i",$thetext, $foo) && preg_match_all("/\[\/html\]/i",$thetext, $foo) ) {

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: eregi ersetzen

Postby Incognito » 16. September 2011 16:52

Super, das hat funktioniert.

Hatte natürlich vorher auch die Funktionsanleitung "studiert", wäre aber nie darauf gekommen einfach nen Dummy zu setzen.

Das Script läuft jetzt genau wie mit den veralteten Funktionen.


Vielen Dank nochmal.
Incognito
 
Posts: 33
Joined: 21. February 2004 15:20
Operating System: Windows 7


Return to PHP

Who is online

Users browsing this forum: No registered users and 58 guests