mirror of
https://github.com/processwire/processwire.git
synced 2025-08-12 09:44:38 +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:
@@ -1770,6 +1770,7 @@ class Sanitizer extends Wire {
|
|||||||
'allowSchemes' => array(),
|
'allowSchemes' => array(),
|
||||||
'disallowSchemes' => array('file', 'javascript'),
|
'disallowSchemes' => array('file', 'javascript'),
|
||||||
'requireScheme' => true,
|
'requireScheme' => true,
|
||||||
|
'reduceScheme' => false, // reduce "scheme://" to "scheme:" in return value? (internal use only)
|
||||||
'convertEncoded' => true,
|
'convertEncoded' => true,
|
||||||
'encodeSpace' => false,
|
'encodeSpace' => false,
|
||||||
'stripTags' => true,
|
'stripTags' => true,
|
||||||
@@ -1805,8 +1806,18 @@ class Sanitizer extends Wire {
|
|||||||
if($options['throw']) throw new WireException($error);
|
if($options['throw']) throw new WireException($error);
|
||||||
$this->error($error);
|
$this->error($error);
|
||||||
$value = str_ireplace(array("$scheme:///", "$scheme://"), '', $value);
|
$value = str_ireplace(array("$scheme:///", "$scheme://"), '', $value);
|
||||||
} else if($_scheme !== $scheme) {
|
} else {
|
||||||
$value = str_replace("$_scheme://", "$scheme://", $value); // lowercase scheme
|
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 won’t 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);
|
$value = str_replace(' ', '%20', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($options['reduceScheme']) {
|
||||||
|
list($scheme, $value) = explode('://', $value, 2);
|
||||||
|
$value = "$scheme:$value";
|
||||||
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user