Помогите конвертировать PHP eregi в preg_match - PullRequest
3 голосов
/ 19 апреля 2010

Мне интересно, может ли кто-нибудь помочь мне преобразовать фрагмент кода PHP, который сейчас не рекомендуется.

Вот единственная строка, которую я пытаюсь преобразовать:

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.

1 Ответ

3 голосов
/ 19 апреля 2010

Попробуйте заменить:

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_match с опцией i в качестве замены.

В общем

eregi($regex,$input)

можно заменить на:

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

EDIT:

Предполагается, что $regex выше не содержит /, который используется в качестве разделителей . Если это произойдет, вам придется использовать другой разделитель, скажем @ или # или |, не содержащийся в $regex

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

В качестве альтернативы вы также можете избежать всех вхождений разделителя в $regex.

...