private static function removeDotSegments($input)
    {
        $output = '';

        while (strlen($input) > 0) {
            if (('../' === substr($input, 0, 3)) || ('./' === substr($input, 0, 2))) {
                $input = substr($input, strpos($input, '/'));
            } elseif ('/./' === substr($input, 0, 3)) {
                $input = substr($input, 2);
            } elseif ('/.' === $input) {
                $input = '/';
            } elseif (('/../' === substr($input, 0, 4)) || ('/..' === $input)) {
                if ($input == '/..') {
                    $input = '/';
                } else {
                    $input = substr($input, 3);
                }

                if (false !== ($end = strrpos($output, '/'))) {
                    $output = substr($output, 0, $end);
                } else {
                    $output = '';
                }
            } elseif (('..' === $input) || ('.' === $input)) {
                $input = '';
            } else {
                if (false === ($end = strpos($input, '/', 1))) {
                    $output .= $input;
                    $input = '';
                } else {
                    $output .= substr($input, 0, $end);
                    $input = substr($input, $end);
                }
            }
        }
        return $output;
    }
private static function removeDotSegments($input)
    {
        $output = '';

        while (strlen($input) > 0) {
            if (('../' === substr($input, 0, 3)) || ('./' === substr($input, 0, 2))) {
                $input = substr($input, strpos($input, '/'));
            } elseif ('/./' === substr($input, 0, 3)) {
                $input = substr($input, 2);
            } elseif ('/.' === $input) {
                $input = '/';
            } elseif (('/../' === substr($input, 0, 4)) || ('/..' === $input)) {
                if ($input == '/..') {
                    $input = '/';
                } else {
                    $input = substr($input, 3);
                }

                if (false !== ($end = strrpos($output, '/'))) {
                    $output = substr($output, 0, $end);
                } else {
                    $output = '';
                }
            } elseif (('..' === $input) || ('.' === $input)) {
                $input = '';
            } else {
                if (false === ($end = strpos($input, '/', 1))) {
                    $output .= $input;
                    $input = '';
                } else {
                    $output .= substr($input, 0, $end);
                    $input = substr($input, $end);
                }
            }
        }
        return $output;
    }
private static function removeDotSegments ( $ input ) { $ output = '' ; while ( strlen ( $ input ) > 0 ) { if ( ( '../' === substr ( $ input , 0 , 3 ) ) || ( './' === substr ( $ input , 0 , 2 ) ) ) { $ input = substr ( $ input , strpos ( $ input , '/' ) ) ; } elseif ( '/./' === substr ( $ input , 0 , 3 ) ) { $ input = substr ( $ input , 2 ) ; } elseif ( '/.' === $ input ) { $ input = '/' ; } elseif ( ( '/../' === substr ( $ input , 0 , 4 ) ) || ( '/..' === $ input ) ) { if ( $ input == '/..' ) { $ input = '/' ; } else { $ input = substr ( $ input , 3 ) ; } if ( false !== ( $ end = strrpos ( $ output , '/' ) ) ) { $ output = substr ( $ output , 0 , $ end ) ; } else { $ output = '' ; } } elseif ( ( '..' === $ input ) || ( '.' === $ input ) ) { $ input = '' ; } else { if ( false === ( $ end = strpos ( $ input , '/' , 1 ) ) ) { $ output .= $ input ; $ input = '' ; } else { $ output .= substr ( $ input , 0 , $ end ) ; $ input = substr ( $ input , $ end ) ; } } } return $ output ; }
Remove dot-segments

This method removes the special "." and ".." complete path segments
from an IRI.

@param string $input The IRI from which dot segments should be removed.

@return string The IRI with all dot-segments removed.

@link http://tools.ietf.org/html/rfc3986#section-5.2.4
Remove dot - segments