File indexing completed on 2024-12-22 05:36:21
0001 <?php 0002 0003 /** 0004 * Validates ftp (File Transfer Protocol) URIs as defined by generic RFC 1738. 0005 */ 0006 class HTMLPurifier_URIScheme_ftp extends HTMLPurifier_URIScheme 0007 { 0008 /** 0009 * @type int 0010 */ 0011 public $default_port = 21; 0012 0013 /** 0014 * @type bool 0015 */ 0016 public $browsable = true; // usually 0017 0018 /** 0019 * @type bool 0020 */ 0021 public $hierarchical = true; 0022 0023 /** 0024 * @param HTMLPurifier_URI $uri 0025 * @param HTMLPurifier_Config $config 0026 * @param HTMLPurifier_Context $context 0027 * @return bool 0028 */ 0029 public function doValidate(&$uri, $config, $context) 0030 { 0031 $uri->query = null; 0032 0033 // typecode check 0034 $semicolon_pos = strrpos($uri->path, ';'); // reverse 0035 if ($semicolon_pos !== false) { 0036 $type = substr($uri->path, $semicolon_pos + 1); // no semicolon 0037 $uri->path = substr($uri->path, 0, $semicolon_pos); 0038 $type_ret = ''; 0039 if (strpos($type, '=') !== false) { 0040 // figure out whether or not the declaration is correct 0041 list($key, $typecode) = explode('=', $type, 2); 0042 if ($key !== 'type') { 0043 // invalid key, tack it back on encoded 0044 $uri->path .= '%3B' . $type; 0045 } elseif ($typecode === 'a' || $typecode === 'i' || $typecode === 'd') { 0046 $type_ret = ";type=$typecode"; 0047 } 0048 } else { 0049 $uri->path .= '%3B' . $type; 0050 } 0051 $uri->path = str_replace(';', '%3B', $uri->path); 0052 $uri->path .= $type_ret; 0053 } 0054 return true; 0055 } 0056 } 0057 0058 // vim: et sw=4 sts=4