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("&" => "&", "<" => "<", ">" => ">", "[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("&" => "&", "<" => "<", ">" => ">", "[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( "&" => "&", "<" => "<", ">" => ">", "[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ő. :)
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.
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).