1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-11 17:24:46 +02:00

Update $sanitizer->url() to support URLs without authority slashes like skype:username?chat per processwire/processwire-issues#1368

This commit is contained in:
Ryan Cramer
2021-05-03 10:30:01 -04:00
parent 47871422b5
commit af8402eaf2

View File

@@ -1770,6 +1770,7 @@ class Sanitizer extends Wire {
'allowSchemes' => array(),
'disallowSchemes' => array('file', 'javascript'),
'requireScheme' => true,
'reduceScheme' => false, // reduce "scheme://" to "scheme:" in return value? (internal use only)
'convertEncoded' => true,
'encodeSpace' => false,
'stripTags' => true,
@@ -1805,8 +1806,18 @@ class Sanitizer extends Wire {
if($options['throw']) throw new WireException($error);
$this->error($error);
$value = str_ireplace(array("$scheme:///", "$scheme://"), '', $value);
} else if($_scheme !== $scheme) {
$value = str_replace("$_scheme://", "$scheme://", $value); // lowercase scheme
} else {
if(strpos($value, '://') === false && stripos($value, "$_scheme:") === 0) {
// URL is in "scheme:value" format
if(!in_array($scheme, array('http', 'https', 'ftp', 'tel', 'mailto'))) {
// add scheme in "scheme://" format temporarily so filter_var wont throw it out
$value = "$scheme://" . substr($value, strlen("$_scheme:"));
$options['reduceScheme'] = true;
}
}
if($_scheme !== $scheme) {
$value = str_replace("$_scheme://", "$scheme://", $value); // lowercase scheme
}
}
}
@@ -1940,6 +1951,11 @@ class Sanitizer extends Wire {
$value = str_replace(' ', '%20', $value);
}
if($options['reduceScheme']) {
list($scheme, $value) = explode('://', $value, 2);
$value = "$scheme:$value";
}
return $value;
}