function EasyRdf_ParsedUri::normalize
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\TraitsCode
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;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.