You are here

public function EasyRdf_ParsedUri::normalize in Drupal 8

Normalizes the path of this URI if it has one. Normalizing a path means that any unnecessary '.' and '..' segments are removed. For example, the URI http://example.com/a/b/../c/./d would be normalized to http://example.com/a/c/d

Return value

object EasyRdf_ParsedUri

File

core/modules/rdf/tests/src/Traits/EasyRdf_ParsedUri.php, line 214

Class

EasyRdf_ParsedUri
A RFC3986 compliant URI parser

Namespace

Drupal\Tests\rdf\Traits

Code

public function normalize() {
  if (empty($this->path)) {
    return $this;
  }

  // Remove ./ from the start
  if (substr($this->path, 0, 2) == './') {

    // Remove both characters
    $this->path = substr($this->path, 2);
  }

  // Remove /. from the end
  if (substr($this->path, -2) == '/.') {

    // Remove only the last dot, not the slash!
    $this->path = substr($this->path, 0, -1);
  }
  if (substr($this->path, -3) == '/..') {
    $this->path .= '/';
  }

  // Split the path into its segments
  $segments = explode('/', $this->path);
  $newSegments = array();

  // Remove all unnecessary '.' and '..' segments
  foreach ($segments as $segment) {
    if ($segment == '..') {

      // Remove the previous part of the path
      $count = count($newSegments);
      if ($count > 0 && $newSegments[$count - 1]) {
        array_pop($newSegments);
      }
    }
    elseif ($segment == '.') {

      // Ignore
      continue;
    }
    else {
      array_push($newSegments, $segment);
    }
  }

  // Construct the new normalized path
  $this->path = implode('/', $newSegments);

  // Allow easy chaining of methods
  return $this;
}