Vraag & Antwoord

Webprogrammeren & scripting

[PHP] UBB + eregi_replace

4 antwoorden
  • Ik wil graag een ubb van een afbeelding omzetten naar een popup afbeelding met uitlijning. UBB: [img=afbGroot.jpg align=right]afbKlein.gif[/img] HTML: <a href="javascript:popImage('afbGroot.jpg')"><img src="afbKlein.gif" align="right" /></a> Nou is mijn kennis van preg_replace en eregi_replace niet echt bijzonder denderend dus ik zou hier heel graag enige hulp bij willen. Ik heb er op dit moment zoiets van gemaakt [code:1:da4aee1c2e]<?php $bericht = eregi_replace("\\[img=(http://)?([^\\[]*)\\][[:space:]]*([^\\[]*)[[:space:]]*\\[/img\\]","<a href=\"javascript:popImage(\\2)\"><img src=\"\\3\" alt=\"\" /></a>", $bericht); ?> [/code:1:da4aee1c2e] Het probleem ligt hem op dit moment bij het filteren van de meegegeven alignment. - marcel
  • Ik werk zelf altijd liever met de PCRE functies. Dus heb je code aangepast naar mijn eigen voorkeur (hope you don't mind). Het lijkt erop dat het werkt, maar echt uitgebreid getest heb ik het nog niet. In de imageReplacer functie kan je de toegestane alignments opgeven in de $aligments array. [code:1:b83052448a] <?php /* UBB: [img=afbGroot.jpg align=right]afbKlein.gif[/img] HTML: <a href="javascript:popImage('afbGroot.jpg')"><img src="afbKlein.gif" align="right" /></a> */ function imageReplacer($big, $small, $align='') { $alignments = array('left', 'right'); $text = "<a href='" . $big . "' onclick='popImage(this.href);return false;'>"; $text .= "<img src='" . $small . "'"; if (in_array($align, $alignments)) $text .= " align='" . $align . "'"; $text .= " /></a>"; return $text; } $input = "[img=foo.jpg align=right]bar.gif[/img]"; //$input = "[img=foo.jpg align=left]bar.gif[/img]"; //$input = "[img=foo.jpg align=nietgeldig]bar.gif[/img]"; $input = "[img=foo.jpg]bar.gif[/img]"; $output = preg_replace( "/\[img=([^]\s]*?)\s*(?:align=([^]]*?))?](.*?)\[\/img]/ei", "imageReplacer('$1', '$3', '$2')", $input); echo htmlentities($output); ?> [/code:1:b83052448a] Als iets niet duidelijk is, dan laat maar weten.
  • Hey Annie, Allereerst bedankt voor je hulp! PCRE Functies, gelijk al een leuke.. Perl Compatible Regular Expressions? Ik kon er niet helemaal achterkomen wat dit precies inhoud maar misschien dat jij er kort wat over kan zeggen? Je script was opzich vrij duidelijk, toch vraag ik me af waarom je nog zoveel buiten te functie zelf regelt, kan de hele preg_replace niet in de functie geimplementeerd worden? Het probleem zit hem namelijk in het feit dat de UBB code nooit een op zichzelf staande code is maar in een tekst voorkomt. Als ik de tekst mee stuur waar de code in zit loopt het geheel vast bij de output = preg_replace(); omdat die alleen de UBB code checkt. handiger zou zijn om de functie zo aan te kunnen roepen: imageReplacer($myText) {} mee eens? Ben op dit moment bezig om jou script tot een functie te verweven waarbij het bovenstaande van toepassing is, echter loop ik dan toch vast bij het preg_replace() gedeelte. - marcel
  • PCRE is inderdaad [url=http://php.net/pcre]Perl Compatible Regular Expressions[/url]. Ik gebruik de imageReplacer functie om de matches in de regexp juist af te handelen (alignment parameter is facultatief); het is dus een hulp-functie. Dit kan in PCRE met de [url=http://nl3.php.net/manual/en/reference.pcre.pattern.modifiers.php]e modifier[/url].* Om het geheel in een functie te plaatsen zou je iets als onderstaande moeten doen: [code:1:54cb5d0797] <?php function imageReplacer($big, $small, $align='') { $alignments = array('left', 'right'); $text = "<a href='" . $big . "' onclick='popImage(this.href);return false;'>"; $text .= "<img src='" . $small . "'"; if (in_array($align, $alignments)) $text .= " align='" . $align . "'"; $text .= " /></a>"; return $text; } function UBB_img($text) { return preg_replace( "/\[img=([^]\s]*?)\s*(?:align=([^]]*?))?](.*?)\[\/img]/ei", "imageReplacer('$1', '$3', '$2')", $text); } // om images te replacen in een tekst doe je het volgende echo UBB_img($myText); ?> [/code:1:54cb5d0797] * Ik zie nu overigens in de php-manual dat er ook een [url=http://nl3.php.net/manual/en/function.preg-replace-callback.php]preg_replace_callback[/url] functie is. Die ziet er wat 'mooier' uit in gebruik.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.