--- /dev/null
+<?php\r
+\r
+// must be called POST validation\r
+\r
+/**\r
+ * Adds target="blank" to all outbound links. This transform is\r
+ * only attached if Attr.TargetBlank is TRUE. This works regardless\r
+ * of whether or not Attr.AllowedFrameTargets\r
+ */\r
+class HTMLPurifier_AttrTransform_TargetBlank extends HTMLPurifier_AttrTransform\r
+{\r
+ /**\r
+ * @type HTMLPurifier_URIParser\r
+ */\r
+ private $parser;\r
+\r
+ public function __construct()\r
+ {\r
+ $this->parser = new HTMLPurifier_URIParser();\r
+ }\r
+\r
+ /**\r
+ * @param array $attr\r
+ * @param HTMLPurifier_Config $config\r
+ * @param HTMLPurifier_Context $context\r
+ * @return array\r
+ */\r
+ public function transform($attr, $config, $context)\r
+ {\r
+ if (!isset($attr['href'])) {\r
+ return $attr;\r
+ }\r
+\r
+ // XXX Kind of inefficient\r
+ $url = $this->parser->parse($attr['href']);\r
+ $scheme = $url->getSchemeObj($config, $context);\r
+\r
+ if ($scheme->browsable && !$url->isBenign($config, $context)) {\r
+ $attr['target'] = '_blank';\r
+ }\r
+ return $attr;\r
+ }\r
+}\r
+\r
+// vim: et sw=4 sts=4\r