1: <?php
2:
3: // must be called POST validation
4:
5: /**
6: * Adds target="blank" to all outbound links. This transform is
7: * only attached if Attr.TargetBlank is TRUE. This works regardless
8: * of whether or not Attr.AllowedFrameTargets
9: */
10: class HTMLPurifier_AttrTransform_TargetBlank extends HTMLPurifier_AttrTransform
11: {
12: /**
13: * @type HTMLPurifier_URIParser
14: */
15: private $parser;
16:
17: public function __construct()
18: {
19: $this->parser = new HTMLPurifier_URIParser();
20: }
21:
22: /**
23: * @param array $attr
24: * @param HTMLPurifier_Config $config
25: * @param HTMLPurifier_Context $context
26: * @return array
27: */
28: public function transform($attr, $config, $context)
29: {
30: if (!isset($attr['href'])) {
31: return $attr;
32: }
33:
34: // XXX Kind of inefficient
35: $url = $this->parser->parse($attr['href']);
36: $scheme = $url->getSchemeObj($config, $context);
37:
38: if ($scheme->browsable && !$url->isBenign($config, $context)) {
39: $attr['target'] = '_blank';
40: }
41: return $attr;
42: }
43: }
44:
45: // vim: et sw=4 sts=4
46: