BBkód funkció készítése

Ezen tutoriálom segítségével megtanulhatja mindenki a következő BBkódokat előállítani:

  • Vastag szöveg
  • Aláhúzott szöveg
  • Dőlt szöveg
  • Képek
  • HTML kód kilövése
  • Sor törések
  • Kód dobozok
  • & lecserélése &-ra, hogy a kód valid legyen.

A kód a tömbökre és az str_replace() függvényre épít. (Megjegyzés: PHP 5 környezetben érdemes jelen esetben az str_ireplace-t használni, így a [I]Szöveg[/I] is dőlt betűs lesz – BlackY). A töbök nagyon egyszerűek. Egyszerre több kulcsot és értéket tartalmazhatnak.

1
$array = array("kulcs" => "érték");

Az str_replace() egy string-ben egy mintát cserél ki egy másikra. (Megyjegyzés: A minták és a “csereszövegek” egyaránt lehetneknek tömbökben is, tehát nem csak egy mintát cserél ki – BlackY).

1
string str_replace( mixed Minta, mixed Cserendo, string Szoveg);

Most össze kell állítanunk egy listát arról, hogy miket akarunk lecserélni, és hogy mikre. Így kell kinéznie a listádnak:

1
2
3
4
5
6
7
8
9
10
11
$BBkod = array("&" => "&",
"<" => "&lt;",
">" => "&gt;",
"[b]" => "<b>",
"[/b]" => "</b>",
"[i]" => "<i>",
"[/i]" => "</i>",
"[u]" => "<u>",
"[/u]" => "</u>",
"[img]" => "<img src='",
"[/img]" => "'>");

Itt úgy van, hogy ami a bal oldalon van azt szeretné kicserélni a jobboldalra. Ám most még csak a kulcsok vannak meg és az értékek. Most az str_replace() segítségét kell hívnunk, így:

1
2
3
4
5
6
7
8
9
10
11
12
$BBkod = array("&" => "&amp;",
"<" => "&lt;",
">" => "&gt;",
"[b]" => "<b>",
"[/b]" => "</b>",
"[i]" => "<i>",
"[/i]" => "</i>",
"[u]" => "<u>",
"[/u]" => "</u>",
"[img]" => "<img src='",
"[/img]" => "'>");
$bbtext = str_replace(array_keys($BBkod), $BBkod, $bbtext);

(Megjegyzés: Az array_keys függvény egy tömbből az kulcsokat gyűjti ki egy tömbbe, ahol már értékként szerepelnek. A visszaadott tömbje jelen esetben így nézhet ki:

1
array('&', '<', '>', '[b]', ...)

– BlackY)

Most már csak igazi funkcióvá kell alakítanunk.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function BBCode($bbtext)
	{
	$BBCode = array(
	"&" => "&amp;",
		"<" => "&lt;",
		">" => "&gt;",
		"[b]" => "<b>",
		"[/b]" => "</b>",
		"[i]" => "<i>",
		"[/i]" => "</i>",
		"[u]" => "<u>",
		"[/u]" => "</u>",
		"[img]" => "<img src='",
		"[/img]" => "'>"
		);
 
	$bbtext = str_replace(array_keys($BBCode), $BBCode, $bbtext);
	return $bbtext;
	}

Ki is próbálhatjuk például a következő kóddal:

1
2
$bbtext= "[b]Ez egy vastag szöveg[/b]";
print BBCode($bbtext);

Ezzel készen is volnánk. Remélem mindenkinek sikerülni fog, egyszerű volt, és érthető. :)

2 HOZZÁSZÓLÁS

  1. olyat nem lehet csinálni, hogy magától cseréljen ki mindent egy oldalon belül? pl minden :) egy smileyre, de úgy, hogy nem kellene változóban eltárolni a szöveget…nekem olyan kellene.

  2. Semmu: ezt a “nem kellene változóban eltárolni…” mondatodat nem teljesen értem.
    De kb két lehetséges dologot szűrtem ki belőle:

    1. magát a szöveget, ami tartalmazza az ilyeneket: :), :D, stb nem akarod változóban tárolni: ebben az esetben javascriptes megoldás kell. (nem sok értelmét látom egy dinamikus oldalnál, habár vannak esetek, amikor jó lehet…)

    2. a smiley-k kódjait nem akarod letárolni: ez is megoldható, de olyan felesleges terhelést okoz, hogy semmi értelme nem lenne (Valamint a kivitelezése is nagyon bonyolult).
    Habár van egy kímélő megoldás is: A smiley-kat a php beolvassa egy tömbbe (pontosabban a nevüket), majd ezt a tömböt veszi viszonyítási alapnak (tehát van egy sad.gif fájlod, amiből a php csinál egy sad indexű sad.gif tartalmú bejegyzést a tömbben). Ennek viszont meg van az a hátránya, hogy a fájlnévben nem lehet speciális karaktereket használni, így korlátozott a használata.

    Remélem a két lehetőség közül valamelyik a te kérdésedre a válasz (részben, mivel forráskódot nem adtam).

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét