ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
URIScheme.php
Go to the documentation of this file.
1 <?php
2 
6 abstract class HTMLPurifier_URIScheme
7 {
8 
15  public $default_port = null;
16 
22  public $browsable = false;
23 
29  public $secure = false;
30 
36  public $hierarchical = false;
37 
44  public $may_omit_host = false;
45 
53  abstract public function doValidate(&$uri, $config, $context);
54 
63  public function validate(&$uri, $config, $context)
64  {
65  if ($this->default_port == $uri->port) {
66  $uri->port = null;
67  }
68  // kludge: browsers do funny things when the scheme but not the
69  // authority is set
70  if (!$this->may_omit_host &&
71  // if the scheme is present, a missing host is always in error
72  (!is_null($uri->scheme) && ($uri->host === '' || is_null($uri->host))) ||
73  // if the scheme is not present, a *blank* host is in error,
74  // since this translates into '///path' which most browsers
75  // interpret as being 'http://path'.
76  (is_null($uri->scheme) && $uri->host === '')
77  ) {
78  do {
79  if (is_null($uri->scheme)) {
80  if (substr($uri->path, 0, 2) != '//') {
81  $uri->host = null;
82  break;
83  }
84  // URI is '////path', so we cannot nullify the
85  // host to preserve semantics. Try expanding the
86  // hostname instead (fall through)
87  }
88  // first see if we can manually insert a hostname
89  $host = $config->get('URI.Host');
90  if (!is_null($host)) {
91  $uri->host = $host;
92  } else {
93  // we can't do anything sensible, reject the URL.
94  return false;
95  }
96  } while (false);
97  }
98  return $this->doValidate($uri, $config, $context);
99  }
100 }
101 
102 // vim: et sw=4 sts=4