Tunnus:

Salasana:

Uusi käyttäjä

Haku

Pikalinkit

Kesähaaste 2010

Paranna Morpion-pelin kansainvälisiä ennätyksiä!

Ohjeet | Nettipeli | Tuloslista

Putkaposti

Suunnittele tiedosto, josta tulee suuri ZIP-paketti!

Vastauksia: 37
Paras: 1158

Tehtävään...

Keskustelu

Ostakaa mieluummin vaikka käyttis joka tukee Unicodea terminaalissa... (Muut kielet) lisää...


Koodivinkit: PHP: Sekalaiset: BBCode

Kirjoittaja: Tomppa32 (18.11.2009)

Yksinkertainen, helposti toimiva BBCode vieraskirjoihin sekä muihin tekstin muokkaus ominaisuutta tarvitseviin paikkoihin.

Koodissa on listattu BBCode-koodit sekä niitä vastaavat HTML-koodit. Funktio etsii viestistä BBCode merkinnät ja vaihtaa ne HTML koodiin.
Näin käyttäjä ei voi itse suoraan levittää sivulle haitallista HTML-koodia.

Kyseinen funktio on käytössä myös omassa vieraskirjassani.

http://koti.mbnet.fi/tompz/!testivieraskirja

Listaukset

*** BBCode funktio
<?php
///////////////////////////////////////////////////
//                                               //
// BBCode 2 HTML 1.0                             //
//                                               //
// Tompz                                         //
// http://koti.mbnet.fi/tompz/                   //
//                                               //
// Saa levittää ja muokata vapaasti, kunhan tämä //
// tekstilaatikko säilyy muuttumattomana!        //
//                                               //
///////////////////////////////////////////////////

function BBCode($teksti){

// Poistetaan ylimääräiset merkit
// Poistetaan ylimääräiset kenoviivat (\)
// Estetään HTML-koodin käyttö
$teksti = trim(stripslashes(htmlentities($teksti)));

// Muutetaan rivinvaihdot HTML-muotoon
$teksti = str_replace("\n", "<br>", $teksti);

// Estetään vieraskirjan sotkeminen (*** = vieraskirjan tietojen erotusmerkki, esim. "|")
//$teksti = str_replace("***", " ", $teksti);

$code_search = array( // Etsittävät BBCode merkinnät
   
'/\[b\](.*?)\[\/b\]/is',                              
   
'/\[i\](.*?)\[\/i\]/is',                              
   
'/\[u\](.*?)\[\/u\]/is',
   
'/\[tt\](.*?)\[\/tt\]/is',
   
'/\[img\](.*?)\[\/img\]/is',
   
'/\[img\=(.*?)\]/is',
   
'/\[url\](.*?)\[\/url\]/is',
   
'/\[url\=(.*?)\](.*?)\[\/url\]/is',
   
'/\[size\=(.*?)\](.*?)\[\/size\]/is',
   
'/\[color\=(.*?)\](.*?)\[\/color\]/is',
   
'/\[quote\](.*?)\[\/quote\]/is',
   
'/\[quote\=(.*?)\](.*?)\[\/quote\]/is',
   
'/\[left\](.*?)\[\/left\]/is',
   
'/\[right\](.*?)\[\/right\]/is',
   
'/\[center\](.*?)\[\/center\]/is'//,
    //'/\[    \](.*?)\[\/      \]/is',
);

$code_replace = array( // BBCode merkinnät korvataan näillä
   
'<strong>$1</strong>',
   
'<em>$1</em>',
   
'<u>$1</u>',
   
'<tt>$1</tt>',
   
'<img src="$1">',
   
'<img src="$1">',
   
'<a href="$1" target="_blank">$1</a>',
   
'<a href="$1" target="_blank">$2</a>',
   
'<font size=$1>$2</font>',
   
'<font color="$1">$2</font>',
   
'Lainaus:<blockquote><p>$1</p></blockquote>',
   
'Lainaus käyttäjältä $1:<blockquote><p>$2</p></blockquote>',
   
'<div align="left">$1</div>',
   
'<div align="right">$1</div>',
   
'<div align="center">$1</div>'//,
    //'',
);

// Tehdään hommat
$teksti = preg_replace ($code_search, $code_replace, $teksti);
// Palautetaan valmis teksti
return $teksti;
}
?>

*** Käyttöesimerkki
<?php
$viesti
= "[size=4][b]BBCode[/b][/size] [size=4][i][color=green]t[/color]".
"[color=darkred]o[/color][color=darkblue]i[/color][color=brown]m[/color]".
"[color=green]i[/color][color=indigo]i[/color]![/i][/size]\n<br>".
"<b>HTML</b> <font color=\"red\"><i>toimii!</i></font>";

echo
"Ilman BBCodea:<br>\n$viesti<br><br>\n\n";

$viesti = "[size=4][b]BBCode[/b][/size] [size=4][i][color=green]t[/color]".
"[color=darkred]o[/color][color=darkblue]i[/color][color=brown]m[/color]".
"[color=green]i[/color][color=indigo]i[/color]![/i][/size]\n<br>".
"<b>HTML</b> <font color=\"red\"><i>toimii!</i></font>";

$viesti = BBCode($viesti);
echo
"BBCodella:<br>\n$viesti";
?>


Juhko [02.01.2010 03:46:30]LainaaMuokkaa
Ihan hyvä vinkki. Sen verran vain kommenttina, että font-tagin sijaan tulisi käyttää span:ia ja määritellä tyylit CSS:llä. Lisäksi tuota voisi kehittää eteenpäin vaikkapa tekemällä tagien automaattisen sulkemisen.
Teuro [04.01.2010 19:04:37]LainaaMuokkaa
Etsintä ja korvaus kannattaa pitää samassa taulukossa.

<?php
$korvaus
= Array();

$korvaus["/\\[b\\](.*?)\\[\\/b\\]/"] = "<b>$1</b>";

echo
preg_replace(array_keys($korvaus), array_values($korvaus), "[b]Moikka[/b]");
?>

Tomppa32 [05.01.2010 14:36:50]LainaaMuokkaa
BBCode funktio hieman lyhemmin, koodi tulkitaan eri tavalla sekä ominaisuuksia on hieman vähemmän.

<?php
function BBcode ($data) {
   
$data = trim(stripslashes(htmlentities($data)));
   
$data = str_replace("\n", "<br \>", $data);
   
//$data = str_replace("|", " ", $data);

   
$data = preg_replace("/\[(\/?)(b|u|i|s|strike|blockquote|code|pre)\]/is", "<$1$2>", $data);
   
$data = preg_replace("/\[url\](.*?)\[\/url\]/is", "<a href=\"$1\" target=\"_blank\">$1</a>", $data);
   
$data = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/is", "<a href=\"$1\" target=\"_blank\">$2</a>", $data);
    return
$data;
}
?>

rautamiekka [18.01.2010 19:08:59]LainaaMuokkaa
Kertoisitteko tietämättömälle mikä idea on tekstipötkössä

'/\[b\](.*?)\[\/b\]/is'

? Ei mitään logiikkaa.
rautamiekka [18.01.2010 19:09:02]LainaaMuokkaa
Kertoisitteko tietämättömälle mikä idea on tekstipötkössä

'/\[b\](.*?)\[\/b\]/is'

? Ei mitään logiikkaa.
rautamiekka [18.01.2010 19:09:06]LainaaMuokkaa
Kertoisitteko tietämättömälle mikä idea on tekstipötkössä

'/\[b\](.*?)\[\/b\]/is'

? Ei mitään logiikkaa.
trilog [18.01.2010 20:42:29]LainaaMuokkaa
http://www.ohjelmointiputka.net/opas.php?tunnus=phpsl
Le-Co-Las [03.03.2010 06:14:29]LainaaMuokkaa
kiitos Tomppa32, tätä kokeilen mielenkiinnolla.!!!!
Le-Co-Las [03.03.2010 06:14:47]LainaaMuokkaa
kiitos Tomppa32, tätä kokeilen mielenkiinnolla.!!!!

ylläpito Antti Laaksonen, ulkoasu Otto Seiskari