Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP 5.5: preg_replace mit Modiefier "/e" ist veraltet (https://www.delphipraxis.net/177341-php-5-5-preg_replace-mit-modiefier-e-ist-veraltet.html)

Matze 1. Nov 2013 11:58


PHP 5.5: preg_replace mit Modiefier "/e" ist veraltet
 
Hallo zusammen,

ich nutze folgenden Code:
Code:
private function create_regex($params, $regex_flag = '', $php_filename = 'index')
{
   $regex = "'(http://[^<>\"]*?/)" . $php_filename . "\.php";
   if (!empty($params))
   {
      $first_param = true;
      foreach ($params as $name => $chars)
      {
         if ($first_param)
         {
            $regex .= "\?$name=($chars)";
            $first_param = false;
         }
         else
         {
            $regex .= "&(?:amp;)?$name=($chars)";
         }
      }
   }
   $regex .= "'" . $regex_flag;

   return $regex;
}

// Aufruf
public function replace_mod_rewrite($code)
{
   $url_in = array();
   $url_out = array();

   $url_in[] = $this->create_regex(array('page' => '(?!admin_)[a-z_]*', 'id' => '[0-9]+'), 'e');
   $url_out[] = "'$1$2/$3/' . \$this->get_title_str('$2', $3) . '.html'";

   return preg_replace($url_in, $url_out, $code);
}
Wie kann das denn so umgeschrieben werden, dass "preg_replace_callback" verwendet wird?
Ich bekomme es irgendwie nicht gebacken. :(

Grüße
Matze

Matze 4. Nov 2013 12:26

AW: PHP 5.5: preg_replace mit Modiefier "/e" ist veraltet
 
Keiner ne Idee? :duck:

himitsu 4. Nov 2013 13:13

AW: PHP 5.5: preg_replace mit Modiefier "/e" ist veraltet
 
http://www.php.net/manual/en/referen....modifiers.php

Die Demo von da hilft nicht?


Ich glaub das würde etwa so aussehn:
PHP-Quellcode:
public function replace_callback($m)
{
   return "'$m[1]$m[2]/$m[3]/' . \$this->get_title_str('$m[2]', $m[3]) . '.html'";
}

public function replace_mod_rewrite($code)
{
   $url_in = array();

   $url_in[] = $this->create_regex(array('page' => '(?!admin_)[a-z_]*', 'id' => '[0-9]+'));

   return preg_replace($url_in, replace_callback, $code);
}

Namenloser 4. Nov 2013 13:39

AW: PHP 5.5: preg_replace mit Modiefier "/e" ist veraltet
 
Der Code ist irgendwie schwer lesbar, wahrscheinlich hat sich deshalb so lange niemand gemeldet. Es wäre hilfreich, mal zumindest ein Beispiel zu haben, was für einen Ausdruck create_regex ausgeben könnte. Zu versuchen, mir vorzustellen, was hinterher in $1, $2 und $3 stehen könnte, macht mir Kopfschmerzen...

Außerdem könntest du vielleicht noch mal genauer erläutern, woran du scheiterst. Ich mache trotzdem mal auf gut Glück einen Glaskugel-Versuch:

:glaskugel: Wenn man bei PHP Methoden als Callback-Parameter verwenden will, muss man das so schreiben:
Delphi-Quellcode:
array($this, 'methodenName')
.

Also z.B.

PHP-Quellcode:
public function replace_callback($m)
{
   return irgendwas;
}

public function replace_mod_rewrite($code)
{
   ...
   return preg_replace($url_in, array($this, 'replace_callback'), $code);
}
(Und falls replace_callback statisch wäre, wäre der erste Eintrag im Array stattdessen der Klassenname).


Ich glaube, ich hatte auch eine Weile gebraucht, um das rauszufinden...

So wie bei himitsu und vielleicht bei dir (?) funktioniert das leider nicht, weil PHP grundsätzlich keine Funktionsreferenzen kennt, nur Strings :roll:.


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf