为什么此代码会导致解析错误?

时间:2012-08-10 20:19:40

标签: php syntax-error

错误讯息:

  

解析错误:语法错误,C:\ xampp \ htdocs \ index.php中的意外“{”   在第135行

代码:

if(isset($_REQUEST['d'])
{ // LINE 135 IS THIS ONE
    $d = $_REQUEST['d'];

    if ($d) {
        while (preg_match('/\\\/',$d)) $d = preg_replace('/\\\/','/',$d);
        while (preg_match('/\/\//',$d)) $d = preg_replace('/\/\//','/',$d);
        while (preg_match('/\.\.\//',$d)) $d = preg_replace('/\.\.\//','/',$d);
        if ($d[strlen($d)-1] != '/') $d = $d.'/';
        if ($d == '/') $d = '';
    }
}

2 个答案:

答案 0 :(得分:10)

你错过了一个结束括号:

if ( isset($_REQUEST['d'] ) )

答案 1 :(得分:4)

Yan得到了主要答案,但你也错过了第一个正则表达式的反斜杠:

    while (preg_match('/\\\/',$d)) $d = preg_replace('/\\\/','/',$d);
                          ^                              ^

前两个在模式中插入一个文字反斜杠,而第三个反斜杠实际上是在末尾转义模式分隔符,导致未终止的模式。