Zastosowałem się do kilku wskazówek, wynik poniżej (IMG:
http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
<?php
/*
* @ Obsluga BBcode
* @ 09.05.06
* @ hadzia...
*/
class bbCode
{
/* tekst do przeszukania */
var $text;
/* podmiana bold
* @ hadzia
*/
var $regBold = '/\[()\](.*)\[\/([b])\]/';
/* podmiana italic
* @ hadzia
*/
var $regItalic = '/\[()\](.*)\[\/([i])\]/';
/* podmiana underline
* @ hadzia
*/
var $regUnderline = '/\[()\](.*)\[\/([u])\]/';
/* podmiana na linki
* @ http://www.hadzia.pl/adres.roz?=zm
* @ [url:http://adres.pl:anchor]
*/
var $regUrl = '/\[(url{1}):(http[s]?:\/\/{1}[\w\.-]+\.\w{2,6}.*?):([^:]+)\]/';
/* podmiana na img
* @ [img:X]
* @ X - int
*/
var $regImage = '/\[(img):(\\d+)\]/';
/* tablica z wyrazeniami regularnymi [b], [i], [u] */
/* konfiguracja tagow */
'2' => array('[u]', '') );
var $bbCodeR = array( '0' => array('<b>', '</b>'), '1' => array('<i>', '</i>'), '2' => array('<u>', '</u>') );
function setString( $text ){
return $this->text = $text;
}
function showResult(){
return $this->findReplace( $this->text );
}
function setArr(){
return $this->arrReg = array( $this->regBold, $this->regItalic, $this->regUnderline ); }
function findReplace($sChange){
$this->setArr();
$a = 0;
for($i = 0; $i < count($this->arrReg); $i++){ if($a == 0) $sSor = $sChange; else $sSor = $sResult;
switch($i){
case 0
: $sResult = str_replace( $this->bbCode[$i][0
], $this->bbCodeR[$i][0
], str_replace( $this->bbCode[$i][1
], $this->bbCodeR[$i][1
], $sSor) ); $a++; break; case 1
: $sResult = str_replace( $this->bbCode[$i][0
], $this->bbCodeR[$i][0
], str_replace( $this->bbCode[$i][1
], $this->bbCodeR[$i][1
], $sSor) ); $a++; break; case 2
: $sResult = str_replace( $this->bbCode[$i][0
], $this->bbCodeR[$i][0
], str_replace( $this->bbCode[$i][1
], $this->bbCodeR[$i][1
], $sSor) ); $a++; break; }
}
}
return $this->findUrl( $sResult );
}
function findUrl( $sUrl ){
if ( preg_match_all ( $this->regUrl, $sUrl, $matches, PREG_SET_ORDER
) ){ for($i = 0; $i < count($matches); $i++){ $all = $matches[$i][0];
$url = $matches[$i][2];
$anchor = $matches[$i][3];
$sUrl = str_replace( $all,'<a href="'. $url .'">'. $anchor .'</a>',$sUrl ); }
return $sUrl;
} else {
return $sUrl;
}
}
}
$bbCode = new bbCode;
$bbCode->setString( $_GET['text'] );
echo $bbCode->showResult();
?>
Ten post edytował dyktek 11.05.2006, 10:13:14