Geachte leden,

Ik heb even een vraagje betreft een quote systeem.

Ik heb dit script geschreven, en hulp gekregen bij die Regulaire Expressie.
Maar als je meerdere quotes in elkaar hebt (dus je quote iemand die ook als iemand heeft gequoted, dan gaat het script naar de haaien.
Heeft iemand hier een oplossing voor?

Dit is mijn script:

<?php
$QuoteLayout = '<div style="border:solid 1px #ccc;margin-bottom: 5px;padding:5px;">
  Eerder geschreven door: <b>$1</b>
  <div style="border-top:dotted 1px #999;padding-top: 5px;margin-top: 5px;">
    <i>$2</i>
  </div>
</div>';
	
$txt = preg_replace ( "/\[quote=(.+?)\](.+?)\[\/quote\]/is" , $QuoteLayout , $txt );
?>
Krijg je errors of valt je layout uit elkaar? Graag wat meer uitleg.
Goedemorgen, hier een screenshot van wat ik dan krijg:

http://217.120.145.128/quote.PNG

[ignore]Het systeem uit de eerste post pakt dus de eerste
en de eerste
waardoor hij dus dit ziet:[/ignore]

[ignore]
[/ignore][ignore][QUOTE][/ignore][ignore]
[/ignore][ignore][/QUOTE][/ignore]
Wat je moet doen, is eerst alle [ignore]
.
[/ignore] replacen, en los daarvan nog eens [ignore]
[/ignore]
<?php
while(preg_match('
', $string)) {
$string = preg_replace('
', '<div class="quote">quote</div>', $string);
}
?>

Zelf de regexes enzo even aanpassen ;-). Bedenk overigens waarom ik hier een while-loop op de preg_match() gebruik.
Dank je, dat ik daar niet aan gedacht heb :P.
Heb die regulaire expressie uit elkaar gehaald:

$quoteOpen = '<div style="border:solid 1px #ccc;margin-bottom: 5px;padding:5px;">Eerder geschreven door: <b>$1</b><div style="border-top:dotted 1px #999;padding-top: 5px;margin-top: 5px;">';
$quoteClose = '</div></div>';
$txt = preg_replace("/\[quote=(.+?)\]/is",$quoteOpen, $txt);
$txt = preg_replace("/\[\/quote\]/is",$quoteClose, $txt);


En nu werkt het.
Dat is niet zo slim. Er kunnen dan onafgemaakte tags gereplaced worden, en krijg je dus een lay-outvervormer. Gebruik mijn manier maar, dan blijft alles in tact. ;-)
Had jouw reactie nog niet gezien. Maar in jouw voorbeeld kan ik niet [ignore]
naam
[/ignore] gebruiken?
Jezpur schreef op 05.05.2009 10:30
Dat is niet zo slim. Er kunnen dan onafgemaakte tags gereplaced worden, en krijg je dus een lay-outvervormer. Gebruik mijn manier maar, dan blijft alles in tact. ;-)


Je kunt eventueel nog een teller maken en als er onafgesloten tags zijn, die sluiten..
Jezpur schreef op 05.05.2009 10:26
<?php
while(preg_match('
', $string)) {
$string = preg_replace('
', '<div class="quote">quote</div>', $string);
}
?>

Zelf de regexes enzo even aanpassen ;-). Bedenk overigens waarom ik hier een while-loop op de preg_match() gebruik.

Je kunt met [php]preg_replace_callback[/php] recursief te werk gaan, zoals met example #3.
Is denk ik netter dan deze manier van jou :-).

Reageren