2010-04-19 157 views
3

我想知道如果有人可以请帮助我转换一段PHP代码,现在已弃用。帮助转换PHP eregi preg_match

这里是我试图转换单行:

if(eregi(trim ($request_url_handler[$x]),$this->sys_request_url) && $this->id_found == 0){ 

它是一个网站返回的配置设置的功能的一部分。以下是整个功能。

// GET CORRECT CONFIG FROM DATABASE 
function get_config($db) 
{ 
    global $tbl_prefix; 
    $db->query("SELECT cid,urls FROM ".$tbl_prefix."sys_config ORDER BY cid"); 

    while($db->next_record()){ 
     $request_url_handler = explode("\n",$db->f("urls")); 
     if(empty($request_url_handler[0])) { 
      $request_url_handler[0] = "@"; 
      $this->id_found = 2; 
     } 

     for($x=0; $x<count($request_url_handler); $x++) { 
      if(empty($request_url_handler[$x])) { 
       $request_url_handler[$x] = "@"; 
      } 
      if(eregi(trim($request_url_handler[$x]),$this->sys_request_url) && $this->id_found == 0) { 
       $this->set_config($db,$db->f("cid")); 
       $this->id_found = 1; 
      } 
     } 

     if($this->id_found == 1) { 
      return($this->sys_config_vars); 
     } 
    } 

    $this->set_config($db,""); 
    return($this->sys_config_vars); 
} 

任何帮助将不胜感激。我只发现eregi函数已被弃用,因为我将XAMPP更新为1.7.3。

+0

请参阅[“如何将PHP的eregi更改为preg_match”](http://customphpfunctions.blogspot.com/2011/12/how-to-change-phps-eregi-to-pregmatch.html)以获取想法关于这两个功能以及用其他替换折旧的功能。 – 2011-12-04 19:35:24

回答

3

尝试更换:

if(eregi(trim($request_url_handler[$x]),$this->sys_request_url) && $this->id_found == 0) { 

有:

$request_url_handler[$x] = trim($request_url_handler[$x]); 
if(preg_match("/$request_url_handler[$x]/i",$this->sys_request_url) && $this->id_found == 0) { 

eregi已过时,我们需要使用preg_matchi的选择,因为它的替代品。

一般而言

eregi($regex,$input) 

可以替换:

preg_match("/$regex/i",$input) 

编辑:

及其假设$regex以上不包含其被用作任何/分隔符。如果是的话那么你就必须使用不同的分隔符说@#|不包含在$regex

preg_match("#$regex#i",$input) 

另外,您还可以逃避在$regex分隔符的所有出现。

+0

感谢百万帮助我解决这个问题。它会出现一个错误:警告:preg_match()[function.preg-match]:第57行的C:\ xampp \ htdocs \ VirtualCMS \ system \ class_config.php中的未知修饰符'/' – Jason 2010-04-19 04:43:06

+0

您需要将' /',如果正则表达式包含斜线,则使用'/'。 – 2010-04-19 04:49:39

+0

@Jason:我已经更新了我的答案。尝试在preg_match中使用不同的分隔符。 – codaddict 2010-04-19 04:50:32