Source for file Links.php
Documentation is available at Links.php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
// +----------------------------------------------------------------------+
* @package HTML_BBCodeParser2
* @author Stijn de Reede <sjr@gmx.co.uk>
require_once 'HTML/BBCodeParser2/Filter.php';
* List of allowed schemes
var $_allowedSchemes = array ('http', 'https', 'ftp', 'irc');
var $_defaultScheme = 'http';
* An array of tags parsed by the engine
var $_definedTags = array (
'attributes'=> array ('url' => 'href=%2$s%1$s%2$s',
't' => 'target=%2$s%1$s%2$s')
* Executes statements before the actual array building starts
* This method should be overwritten in a filter if you want to do
* something before the parsing process starts. This can be useful to
* allow certain short alternative tags which then can be converted into
* proper tags with preg_replace() calls.
* The main class walks through all the filters and and calls this
* method if it exists. The filters should modify their private $_text
* @author Stijn de Reede <sjr@gmx.co.uk>
* @author Seth Price <seth@pricepages.org>
$options = $this->_options;
$oe = $options['open_esc'];
$ce = $options['close_esc'];
$schemes = implode('|', $this->_allowedSchemes);
$pattern = array ( "/(?<![\"'=". $ce. "\/])(". $oe. "[^". $ce. "]*". $ce. ")?(((". $schemes. "):\/\/|www)[@-a-z0-9.]+\.[a-z]{2,4}[^\s()\[\]]*)/i",
"!". $oe. "url(". $ce. "|\s.*". $ce. ")(.*)". $oe. "/url". $ce. "!iU",
"!". $oe. "url=((([a-z]*:(//)?)|www)[@-a-z0-9.]+)([^\s\[\]]*)". $ce. "(.*)". $oe. "/url". $ce. "!i");
$pp = preg_replace($pattern[1 ], $o. "url=\$2\$1\$2". $o. "/url". $c, $pp);
* Intelligently expand a URL into a link
* @author Seth Price <seth@pricepages.org>
* @author Lorenzo Alberton <l.alberton@quipo.it>
function smarterPPLinkExpand ($matches)
$options = $this->_options;
$oe = $options['open_esc'];
$ce = $options['close_esc'];
//If we have an intro tag that is [url], then skip this match
if (preg_match("/". $oe. "url(=[^\s()\[\]=]+)?". $ce. "/i", $matches[1 ])) {
$punctuation = '.,;:'; // Links can't end with these chars
// Knock off ending punctuation
$last = substr($matches[2 ], -1 );
while (strpos($punctuation, $last) !== false ) {
// Last character is punctuation - remove it from the url
$trailing = $last. $trailing;
$matches[2 ] = substr($matches[2 ], 0 , -1 );
$last = substr($matches[2 ], -1 );
$off = strpos($matches[2 ], ':');
//Is a ":" (therefore a scheme) defined?
* Create a link with the default scheme of http. Notice that the
* text that is viewable to the user is unchanged, but the link
* itself contains the "http://".
return $matches[1 ]. $o. 'url='. $this->_defaultScheme. '://'. $matches[2 ]. $c. $matches[2 ]. $o. '/url'. $c. $trailing;
$scheme = substr($matches[2 ], 0 , $off);
* If protocol is in the approved list than allow it. Note that this
* check isn't really needed, but the created link will just be deleted
* later in smarterPPLink() if we create it now and it isn't on the
if (in_array($scheme, $this->_allowedSchemes)) {
return $matches[1 ]. $o. 'url'. $c. $matches[2 ]. $o. '/url'. $c. $trailing;
* Finish preparsing URL to clean it up
* @author Seth Price <seth@pricepages.org>
function smarterPPLink ($matches)
$options = $this->_options;
$urlServ = $this->_defaultScheme. '://'. $urlServ;
//Add trailing slash if missing (to create a valid URL)
$protocol = substr($urlServ, 0 , $off);
if (in_array($protocol, $this->_allowedSchemes)) {
//If protocol is in the approved list than allow it
return $o. 'url='. $urlServ. $path. $c. $matches[6 ]. $o. '/url'. $c;
Documentation generated on Sat, 03 Nov 2012 14:30:03 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.
|