3 class HTMLPurifier_URIFilter_Munge
extends HTMLPurifier_URIFilter
8 public $name = 'Munge';
21 * @type HTMLPurifier_URIParser
38 protected $replace = array();
41 * @param HTMLPurifier_Config $config
44 public function prepare($config)
46 $this->target
= $config->get('URI.' . $this->name
);
47 $this->parser
= new HTMLPurifier_URIParser();
48 $this->doEmbed
= $config->get('URI.MungeResources');
49 $this->secretKey
= $config->get('URI.MungeSecretKey');
54 * @param HTMLPurifier_URI $uri
55 * @param HTMLPurifier_Config $config
56 * @param HTMLPurifier_Context $context
59 public function filter(&$uri, $config, $context)
61 if ($context->get('EmbeddedURI', true) && !$this->doEmbed
) {
65 $scheme_obj = $uri->getSchemeObj($config, $context);
68 } // ignore unknown schemes, maybe another postfilter did it
69 if (!$scheme_obj->browsable
) {
71 } // ignore non-browseable schemes, since we can't munge those in a reasonable way
72 if ($uri->isBenign($config, $context)) {
74 } // don't redirect if a benign URL
76 $this->makeReplace($uri, $config, $context);
77 $this->replace
= array_map('rawurlencode', $this->replace
);
79 $new_uri = strtr($this->target
, $this->replace
);
80 $new_uri = $this->parser
->parse($new_uri);
81 // don't redirect if the target host is the same as the
83 if ($uri->host
=== $new_uri->host
) {
86 $uri = $new_uri; // overwrite
91 * @param HTMLPurifier_URI $uri
92 * @param HTMLPurifier_Config $config
93 * @param HTMLPurifier_Context $context
95 protected function makeReplace($uri, $config, $context)
97 $string = $uri->toString();
99 $this->replace
['%s'] = $string;
100 $this->replace
['%r'] = $context->get('EmbeddedURI', true);
101 $token = $context->get('CurrentToken', true);
102 $this->replace
['%n'] = $token ?
$token->name
: null;
103 $this->replace
['%m'] = $context->get('CurrentAttr', true);
104 $this->replace
['%p'] = $context->get('CurrentCSSProperty', true);
105 // not always available
106 if ($this->secretKey
) {
107 $this->replace
['%t'] = sha1($this->secretKey
. ':' . $string);
112 // vim: et sw=4 sts=4