Ejemplo n.º 1
0
 /**
  * Format a [url] tag by producing an <a>...</a> element.
  *
  * The URL only allows http, https, mailto, and ftp protocols for safety.
  *
  * @param BBCode $bbcode The {@link BBCode} object doing the parsing.
  * @param int $action The current action being performed on the tag.
  * @param string $name The name of the tag.
  * @param string $default The default value passed to the tag in the form: `[tag=default]`.
  * @param array $params All of the parameters passed to the tag.
  * @param string $content The content of the tag. Only available when {@link $action} is **BBCODE_OUTPUT**.
  * @return string Returns the full HTML url.
  */
 public function doURL(BBCode $bbcode, $action, $name, $default, $params, $content)
 {
     // We can't check this with BBCODE_CHECK because we may have no URL
     // before the content has been processed.
     if ($action == BBCode::BBCODE_CHECK) {
         return true;
     }
     $url = is_string($default) ? $default : $bbcode->unHTMLEncode(strip_tags($content));
     if ($bbcode->isValidURL($url)) {
         if ($bbcode->debug) {
             Debugger::debug('ISVALIDURL');
         }
         if ($bbcode->getURLTargetable() !== false && isset($params['target'])) {
             $target = ' target="' . htmlspecialchars($params['target']) . '"';
         } else {
             $target = '';
         }
         if ($bbcode->getURLTarget() !== false && empty($target)) {
             $target = ' target="' . htmlspecialchars($bbcode->getURLTarget()) . '"';
         }
         // If $detect_urls is on, it's possble the $content is already
         // enclosed in an <a href> tag. Remove that if that is the case.
         $content = preg_replace('/^\\<a [^\\>]*\\>(.*?)<\\/a>$/', "\\1", $content);
         return $bbcode->fillTemplate($bbcode->getURLTemplate(), array("url" => $url, "target" => $target, "content" => $content));
     } else {
         return htmlspecialchars($params['_tag']) . $content . htmlspecialchars($params['_endtag']);
     }
 }