Partyflock
 
Forumonderwerp · 898739
153x bekeken
Waarschuw beheerder
Hi luitjes! :D

Ik ben op het mom bezig met een functie om html naar BBcode om te zetten. Nou krijg ik wel wat aan de praat, maar ik begrijp een paar dingetjes niet. miss dat 1 van jullie mij kan helpen... :)


Ik heb de volgende code:

function format_comment($s, $strip_html = true) {
if ($strip_html) $s = htmlspecialchars($s);
$s = preg_replace("/\[b\]((\s|.)+?)\[\/b\]/", "<b>\\1</b>", $s);
$s = preg_replace("/\[i\]((\s|.)+?)\[\/i\]/", "<i>\\1</i>", $s);
$s = preg_replace("/\[u\]((\s|.)+?)\[\/u\]/", "<u>\\1</u>", $s);
$s = preg_replace("/\[u\]((\s|.)+?)\[\/u\]/i", "<u>\\1</u>", $s);
return $s;
}

effe puur als voorbeeld.
In dit voorbeeld maak ik van BBcode [ b ] .. [ /b ], HTML <b> .. </b>.

Ik moet het anderom hebben, dus ga ik van de code dit maken:

$s = preg_replace("/\<b\>((\s|.)+?)\<\/b\>/", "\\1", $s);

en dat werkt prima. (Y)


Met de functie preg_replace heb ik geen problemen mee, alleen dit stukje begrijp ik niet, en kan ik ook niks over vinden: ((\s|.)+?)
die \s weet ik wel, die staat voor string.
een \d staat voor numeriek geloof ik,
en een $ staat voor wildcard als ik het goed heb.

Maar waar komt deze notatie vandaan? Lijkt wel op perl of python. Het vreemde vind ik, dat ik er op php.net niks over kan vinden. :(

het gaat om deze regel hier, en daar ben ik nu al de hele dag mee aan het puzzelen. :( :(

$s = preg_replace("/\[img\]([^\s'\"<>]+?)\[\/img\]/i", "<img border=0 src=\"\\1\">", $s);

Nu krijg ik uit [ img ] [ /img ] perfect de html terug, maar ik moet het andersom hebben. :X

$s = preg_replace("/\<img\ src=\"([^\s'\"<>]+?)\">/i", "[ img ]\\1[ /img ]", $s);

En dat hierboven werkt niet!!! :@
Wat houd dit in? ([^\s'\"<>]+?)

Kan iemand helpen aub?
Ik ben het bekende draardje effe kwijt.... :/
 
Waarschuw beheerder
Als je dan deze code invoert en dat deelt door 3'en heb je de juiste BBcode


static ostream& do_setformat(ostream& os, const char fmt[]) { int i = 0; while (fmt[i] != 0) { if (fmt[i] != '%') { os << fmt[i]; i++; } else { i++; if (fmt[i] == '%') { os << fmt[i]; i++; } else { Bool ok = TRUE; int istart = i; Bool more = TRUE; int width = 0; int precision = 6; long flags = 0; char fill = ' '; Bool alternate = FALSE; while (more) { switch (fmt[i]) { case '+': flags |= ios::showpos; break; case '-': flags |= ios::left; break; case '0': flags |= ios::internal; fill = '0'; break; case '#': alternate = TRUE; break; case ' ': break; default: more = FALSE; break; } if (more) i++; } if (isdigit(fmt[i])) { width = atoi(fmt+i); do i++; while (isdigit(fmt[i])); } if (fmt[i] == '.') { i++; precision = atoi(fmt+i); while (isdigit(fmt[i])) i++; } switch (fmt[i]) { case 'd': flags |= ios::dec; break; case 'x': flags |= ios::hex; if (alternate) flags |= ios::showbase; break; case 'X': flags |= ios::hex | ios::uppercase; if (alternate) flags |= ios::showbase; break; case 'o': flags |= ios::hex; if (alternate) flags |= ios::showbase; break; case 'f': flags |= ios::fixed; if (alternate) flags |= ios::showpoint; break; case 'e': flags |= ios::scientific; if (alternate) flags |= ios::showpoint; break; case 'E': flags |= ios::scientific | ios::uppercase; if (alternate) flags |= ios::showpoint; break; case 'g': if (alternate) flags |= ios::showpoint; break; case 'G': flags |= ios::uppercase; if (alternate) flags |= ios::showpoint; break; default: ok = FALSE; break; } i++; if (fmt[i] != 0) ok = FALSE; if (ok) { os.unsetf(ios::adjustfield | ios::basefield | ios::floatfield); os.setf(flags); os.width(width); os.precision(precision); os.fill(fill); } else i = istart; } } } return os; }





































































(F)
Waarschuw beheerder
uhuhm....

dat zal wel werken, neem ik aan, maar begrijp niks van die code!

Ik wil mijn code kunnen begrijpen, zodat ik de code naar believe kan aanpassen.

En dan bedoel ik bv dit:

((\s|.)+?)

of dit:

([a-zA-Z]+)

of dit:

([^()<>\s]+?)

Wat zijn dit voor notaties, waar ken ik daar info over vinden?

Ik heb nu voor de lol eens dit gedaan:

$s = preg_replace("/\<font\ color=\"([a-zA-Z]+)\"\>((\s|.)+?)\<\/color\>/i", "[color=\\1]\\2[/color]", $s);

Maar schijnt ook niet te werken... :/
Waarschuw beheerder
donateur
Uitspraak van Miss_Marjon; Stuffy; op maandag 4 september 2006 om 21:53:
Het vreemde vind ik, dat ik er op php.net niks over kan vinden. :(


http://nl3.php.net/manual/en/reference.pcre.pattern.syntax.php

Uitspraak van Miss_Marjon; Stuffy; op maandag 4 september 2006 om 21:53:
$s = preg_replace("/\[img\]([^\s'\"<>]+?)\[\/img\]/i", "<img border=0 src=\"\\1\">", $s);

Nu krijg ik uit [ img ] [ /img ] perfect de html terug, maar ik moet het andersom hebben. :X

$s = preg_replace("/\<img\ src=\"([^\s'\"<>]+?)\">/i", "[ img ]\\1[ /img ]", $s);
En dat hierboven werkt niet!!!


Dit komt doordat je [img]xxx[/img] omzet naar <img border=0 src="xxx">.
Om het omgekeerde te doen, controleer je of de string voldoet aan in ieder geval <img src="..., terwijl je het omgezet had naar <img border=0 src="...

Het volgende zal dus gewoon werken:
<?php

$s = '[img width=285 height=110]http://www.google.nl/intl/nl_nl/images/logo.gif[/img]';
$s = preg_replace("/\[img\]([^\s'\"<>]+?)\[\/img\]/i", "<img border=0 src=\"\\1\">", $s);
echo $s;
$s = preg_replace("/\<img border=0 src=\"([^\s'\"<>]+?)\">/i", "[img]\\1[/img]", $s);
echo $s;

?>


Waarschuw beheerder
Dankjewel, jullie beiden. ;)

Daar heb ik wat aan! (Y)


@ RATBORG:
Als dat PHP code is, mag je die code wel eens na laten kijken..... :/

denk dat een C compiler het beter snapt. ;) (f)
 
Waarschuw beheerder
Uitspraak van Miss_Marjon; Stuffy; op maandag 4 september 2006 om 23:12:
@ RATBORG:
Als dat PHP code is, mag je die code wel eens na laten kijken.....


Vat het ook nog even serieus op ja :lol: 8)