![]() |
|
||||||
|
|
| 07.02.12 / 23:31 |
|
Kilukarp
Mis on bb-kood?Paljudes paikades (foorumid näiteks) on ohtlik lubada kasutajatel vabalt html-i sisestada. Bb-kood on html-i aseaine, mille abil saab lisada kontrollitud kujul kujunduselemente. Lisavõimalusena lubab bb-kood kasutada tage, mida otseselt html-is ei ole. Näiteks: code - koodi jaoks php - php jaoks See õpetuse abil saab tekitada omale lihtsa ja lühikese bb-koodi muutja. Õpetus Kõigepeal bb-koodi kirjeldus ehk mida üldse töödelda. Esitatud lihtsa massiivi kujul tag -> vahetus string: $tagid = array(Vahetus string on tehtud sellisel kujul, mis sobib funktsioonile sprintf esimeseks parameetriks. Järgmine rida liidab massiivi võtmed kokku, kasutades vahemärgiks loogilist "või"-d ehk "|". See rida on vajalik regulaaravaldise jaoks: $atag = join( '|', array_keys( $tagid));Nüüd tuleb teha paar abi-funktsioon. Põhifunktsioon - otsib ette antud stringis olevaid bb-koode, ning nende leidmisel kutsub välja callback funktsioon. Selleks kasutab php funktsiooni mixed preg_replace_callback ( mixed pattern, mixed callback, mixed subject);function nk( $s){Regulaaravaldis jaguneb järgnevalt: \[ - otsitav string algab kandilise suluga ('.$atag.') - otsitakse kõiki elemente, millede vahel kasutatakse loogilist "või"-d. Ühtlasi on see loogiline element nr. 1(=(.*)) - lisaks elemendile võib sisaldada võrdusmärki ja sellele järgnevat teksti. Loogilised elemendid 2 ja 3.? - määrab ära, et eelmine tingimus (võrdusmärgi kohta) võib esineda 0 või rohkem korda\] - esimene pool lõppeb kandilise suluga(.*) - siin võib olla suhteliselt suvaline tekst. Loogiline element 4.\[\/ - tagi lõpumärgid - kandilise sulu algus ja kaldkriips\1 - lõpp peab olema sama, kui algus - ehk siis loogiline element nr. 1\] - tagi lõpp.i - ei hoolita tähtede suurusest.s - ei hoolita rea vahetustest.U - vähendatakse "ahnust". "Ahne" otsing kasutaks mitme sarnase tagi korral esimese esimest tagi ja viimase tagumist tagi.nc on siis see callback funktsiooni nimi: function nc( $s){See rida läheb uuele ringile, sest üks kood võib sisaldada omakorda teist: if ( $s[1] ) $s[4] = nk( $s[4]);Järgneval real on kogu koodi vahetamise raskus. Massiivi elemendid sõltuvad regulaaravaldises olnud sulgudest - iga sulu koht vastab ühele loogilisele elemendile ehk siis massiivi elemendile. Massiivis kohal 0 on kogu vahetatav string. return $s[1]?sprintf($tagid[$s[1]],(!empty($s[3])?$s[3]:$s[4]),$s[4]):$s[0];See kutsub välja koodide muutmise: echo nl2br( nk( htmlspecialchars( $text, ENT_NOQUOTES)));PHP kood:
Artikli kommentaarid |
|