mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-11-30 00:26:21 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
59 lines
1.6 KiB
PHP
59 lines
1.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Validates ftp (File Transfer Protocol) URIs as defined by generic RFC 1738.
|
|
*/
|
|
class HTMLPurifier_URIScheme_ftp extends HTMLPurifier_URIScheme
|
|
{
|
|
/**
|
|
* @type int
|
|
*/
|
|
public $default_port = 21;
|
|
|
|
/**
|
|
* @type bool
|
|
*/
|
|
public $browsable = true; // usually
|
|
|
|
/**
|
|
* @type bool
|
|
*/
|
|
public $hierarchical = true;
|
|
|
|
/**
|
|
* @param HTMLPurifier_URI $uri
|
|
* @param HTMLPurifier_Config $config
|
|
* @param HTMLPurifier_Context $context
|
|
* @return bool
|
|
*/
|
|
public function doValidate(&$uri, $config, $context)
|
|
{
|
|
$uri->query = null;
|
|
|
|
// typecode check
|
|
$semicolon_pos = strrpos($uri->path, ';'); // reverse
|
|
if ($semicolon_pos !== false) {
|
|
$type = substr($uri->path, $semicolon_pos + 1); // no semicolon
|
|
$uri->path = substr($uri->path, 0, $semicolon_pos);
|
|
$type_ret = '';
|
|
if (strpos($type, '=') !== false) {
|
|
// figure out whether or not the declaration is correct
|
|
list($key, $typecode) = explode('=', $type, 2);
|
|
if ($key !== 'type') {
|
|
// invalid key, tack it back on encoded
|
|
$uri->path .= '%3B' . $type;
|
|
} elseif ($typecode === 'a' || $typecode === 'i' || $typecode === 'd') {
|
|
$type_ret = ";type=$typecode";
|
|
}
|
|
} else {
|
|
$uri->path .= '%3B' . $type;
|
|
}
|
|
$uri->path = str_replace(';', '%3B', $uri->path);
|
|
$uri->path .= $type_ret;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|