public function parse(array $tag, $content) {
        $url = isset($tag['attributes']['href']) ? $tag['attributes']['href'] : $content;
        $protocols = $this->getConfig('protocols');
        $defaultProtocol = $this->getConfig('defaultProtocol');
        $hasProtocol = preg_match('/^(' . implode('|', $protocols) . ')/i', $url);

        if (!in_array($defaultProtocol, $protocols)) {
            $defaultProtocol = 'http';
        }

        // Allow relative and absolute paths, else check protocols
        if (!preg_match('/^(\.\.?)?\//', $url)) {
            if (!$hasProtocol) {
                // Only allow if no protocol exists, just not the ones not in the list
                if (preg_match('/^(?![a-z]+:\/\/)/', $url) && filter_var($defaultProtocol . '://' . $url, FILTER_VALIDATE_URL)) {
                    $url = $defaultProtocol . '://' . $url;
                } else {
                    return $url;
                }
            }

            // Return an invalid URL
            if (!filter_var($url, FILTER_VALIDATE_URL)) {
                return $url;
            }
        }

        $tag['attributes']['href'] = $url;

        if (!empty($tag['attributes']['target'])) {
            $tag['attributes']['target'] = '_' . $tag['attributes']['target'];
        }

        if ($this->getParser()->getConfig('shorthandLinks')) {
            $tag['content'] = $this->message('link');

            return '[' . parent::parse($tag, $content) . ']';
        }

        return parent::parse($tag, $content);
    }
public function parse(array $tag, $content) {
        $url = isset($tag['attributes']['href']) ? $tag['attributes']['href'] : $content;
        $protocols = $this->getConfig('protocols');
        $defaultProtocol = $this->getConfig('defaultProtocol');
        $hasProtocol = preg_match('/^(' . implode('|', $protocols) . ')/i', $url);

        if (!in_array($defaultProtocol, $protocols)) {
            $defaultProtocol = 'http';
        }

        // Allow relative and absolute paths, else check protocols
        if (!preg_match('/^(\.\.?)?\//', $url)) {
            if (!$hasProtocol) {
                // Only allow if no protocol exists, just not the ones not in the list
                if (preg_match('/^(?![a-z]+:\/\/)/', $url) && filter_var($defaultProtocol . '://' . $url, FILTER_VALIDATE_URL)) {
                    $url = $defaultProtocol . '://' . $url;
                } else {
                    return $url;
                }
            }

            // Return an invalid URL
            if (!filter_var($url, FILTER_VALIDATE_URL)) {
                return $url;
            }
        }

        $tag['attributes']['href'] = $url;

        if (!empty($tag['attributes']['target'])) {
            $tag['attributes']['target'] = '_' . $tag['attributes']['target'];
        }

        if ($this->getParser()->getConfig('shorthandLinks')) {
            $tag['content'] = $this->message('link');

            return '[' . parent::parse($tag, $content) . ']';
        }

        return parent::parse($tag, $content);
    }
public function parse ( array $ tag , $ content ) { $ url = isset ( $ tag [ 'attributes' ] [ 'href' ] ) ? $ tag [ 'attributes' ] [ 'href' ] : $ content ; $ protocols = $ this -> getConfig ( 'protocols' ) ; $ defaultProtocol = $ this -> getConfig ( 'defaultProtocol' ) ; $ hasProtocol = preg_match ( '/^(' . implode ( '|' , $ protocols ) . ')/i' , $ url ) ; if ( ! in_array ( $ defaultProtocol , $ protocols ) ) { $ defaultProtocol = 'http' ; } // Allow relative and absolute paths, else check protocols if ( ! preg_match ( '/^(\.\.?)?\//' , $ url ) ) { if ( ! $ hasProtocol ) { // Only allow if no protocol exists, just not the ones not in the list if ( preg_match ( '/^(?![a-z]+:\/\/)/' , $ url ) && filter_var ( $ defaultProtocol . '://' . $ url , FILTER_VALIDATE_URL ) ) { $ url = $ defaultProtocol . '://' . $ url ; } else { return $ url ; } } // Return an invalid URL if ( ! filter_var ( $ url , FILTER_VALIDATE_URL ) ) { return $ url ; } } $ tag [ 'attributes' ] [ 'href' ] = $ url ; if ( ! empty ( $ tag [ 'attributes' ] [ 'target' ] ) ) { $ tag [ 'attributes' ] [ 'target' ] = '_' . $ tag [ 'attributes' ] [ 'target' ] ; } if ( $ this -> getParser ( ) -> getConfig ( 'shorthandLinks' ) ) { $ tag [ 'content' ] = $ this -> message ( 'link' ) ; return '[' . parent :: parse ( $ tag , $ content ) . ']' ; } return parent :: parse ( $ tag , $ content ) ; }
Using shorthand variation if enabled.

@param array $tag
@param string $content
@return string
Using shorthand variation if enabled .