anoniem Geplaatst: 9 januari 2004 Delen Geplaatst: 9 januari 2004 ik wil graag smilies (zoals[code:1:0bcce19e03] :P :D :) ;) [/code:1:0bcce19e03]) kunnen gebruiiken op mijn forum... (niet dat ie waarschijnlijk publiekelijk wordt maar oke...) nou heb ik eff zitten graven in de regular expression van php en ik kom daar uit op het volgende: [code:1:0bcce19e03] function($bericht) { $tonguit = '/:P/'; $tonguitdir = "<img src='".$_SERVER['REQUEST_URI']."icons/puh2.gif'>"; preg_replace($tonguit,$tonguitdir,$bericht); return $bericht } maar nu replact hij helemaal nix hij geeft nog steeds de :P weer. [/code:1:0bcce19e03] ik ben net nieuwe in reg exps dus misschien zie ik wat stoms over het hoofd maar zou iemand wat tips kunnen geven? op hoe hij wel kan werken..? inhoud bericht: [code:1:0bcce19e03] the forum is finally up and running :P [/code:1:0bcce19e03] dit wordt uit db getrokken... Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 Ik ben enige tijd geleden ook met iets dergelijks bezig geweest en kwam met de volgende code op de proppen:[code:1:e3694419d1]/* * Smileys definiëren */ $smilies = array(":)", ";)", ":D"); $smiliesPics = array("smile","wink","biggrin"); for($i=0;$i<count($smilies);$i++){ $smilies[$i] = str_replace(")","\)",$smilies[$i]); $smilies[$i] = str_replace("(","\(",$smilies[$i]); $smilies[$i] = str_replace(" ","\s",$smilies[$i]); } /* * Zoekpatroon en vervanging smileys */ $patterns = array(); $replacements = array(); if($showSmileys){ for($i=0;$i<count($smilies);$i++){ array_push($patterns, "/\s(".$smilies[$i].")/"); array_push($replacements, " <img src=\"/images/smilies/".$smiliesPics[$i].".gif\" alt=\"$1\" title=\"$1\" />"); }} preg_replace($patterns, $replacements, nl2br(htmlentities(" ".$bericht));[/code:1:e3694419d1]Het zal geen prijzen winnen voor efficiency of overzichtelijkheid, maar het werkt prima! Let erop dat in de eerste array de smilies komen te staan, in de tweede array komen de bestandsnamen. De extensie ".gif" wordt er automatisch achter geplakt. Je moet het zelf even in een functie gooien, maar je komt hiermee wel een heel eind. - Bas Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 [quote:b1743b2415="bas"] Het zal geen prijzen winnen voor efficiency of overzichtelijkheid, maar het werkt prima! [/quote:b1743b2415] mijn gehele forum zal dat toch niet winnen want ik gebruik geen O.O.P om het te maken maar gewoon functioneel.. :D :P en af en toe toch een functie om het overzichtelijk te houden... :oops: [code:1:b1743b2415] if($showSmileys){ [/code:1:b1743b2415] kan jij mij dit even uit leggen dit snap ik niet (daar stikt ie ook op...: Notice: Undefined variable: showSmileys in c:\phpdev\www\forum\inc\config.php on line 65) en op de plek waar ie moet komen staat ook nix... als je de source wilt zien dan moet je het even melden... http://62.251.83.181/forum/viewtopic.php?t=1 het gaat alleen nog om de 1ste post of iemand moet dat wat ik heb gemaakt kunnen aan passen zodat het werkt.. dan wordt het wel wat groter maar dat maakt mij toch niet echt uit... :wink: Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 Daarmee kun je smileys aan en uit zetten. Zet dit er bijvoorbeeld is boven:[code:1:3b4f020cfd]$showSmileys = true;[/code:1:3b4f020cfd] Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 okee nou stikt ie daar niet meer op... als ik nu een return geef (zodat de tekst kan worden weergegeven..) met dit : [code:1:9425cbe331] $bericht2 = preg_replace(...); return $bericht2; dan blijft die :P staan [/code:1:9425cbe331] Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 [code:1:724d51c7be]if($showSmileys){[/code:1:724d51c7be]Oeps... Dat is nog een overblijfsel uit mijn uitgebreidere code, er zat namelijk nog een hele lap omheen. In principe kan je dat gewoon verwijderen, denk er dan wel aan dat je de afsluitende accolade "}" ook verwijdert. Als je de code in een functie plaatst zal het iets als het volgende worden:[code:1:724d51c7be]function replaceSmilies($bericht){ /* * Smileys definiëren */ $smilies = array(":)", ";)", ":D"); $smiliesPics = array("smile","wink","biggrin"); for($i=0;$i<count($smilies);$i++){ $smilies[$i] = str_replace(")","\)",$smilies[$i]); $smilies[$i] = str_replace("(","\(",$smilies[$i]); $smilies[$i] = str_replace(" ","\s",$smilies[$i]); } /* * Zoekpatroon en vervanging smileys */ $patterns = array(); $replacements = array(); for($i=0;$i<count($smilies);$i++){ array_push($patterns, "/\s(".$smilies[$i].")/"); array_push($replacements, " <img src=\"/images/smilies/".$smiliesPics[$i].".gif\" alt=\"$1\" title=\"$1\" />"); } $eindbericht = preg_replace($patterns, $replacements, nl2br(htmlentities(" ".$bericht)); return $eindbericht; }[/code:1:724d51c7be]Dit roep je aan in PHP dmv[code:1:724d51c7be]$input = $_GET["berichtofhoehetookheet"]; echo replaceSmilies($input);[/code:1:724d51c7be]Niet getest, maar zou moeten werken. - Bas Quote Link naar reactie
anoniem Geplaatst: 10 januari 2004 Auteur Delen Geplaatst: 10 januari 2004 thx Bas, Het werkt.. nou zou ik alsnog graag willen weten wat er nou fout was aan mijn stukje code (vooral de reg exp..) daar kan ik later dan nog wel wat mee... Quote Link naar reactie
anoniem Geplaatst: 10 januari 2004 Auteur Delen Geplaatst: 10 januari 2004 [quote:6e4b13ff95="The game"][code:1:6e4b13ff95]$tonguit = '/:P/';[/code:1:6e4b13ff95][/quote:6e4b13ff95] Dit is geen goede match voor een smiley. Ten eerste moet je tussen ronde haken zetten wat nou precies het gedeelte is waar je op wil testen en wat je wil vervangen. Je krijgt dan:[code:1:6e4b13ff95]$tonguit = '/(:P)/';[/code:1:6e4b13ff95]Hoewel dit al zal werken heb ik nog een extra test ingebouwd, namelijk of er een spatie aan de smiley voorafgaat. Deze spatie wil je niet vervangen dus die komt buiten de ronde haken en wordt gerepresenteerd door [b:6e4b13ff95]\s[/b:6e4b13ff95], waardoor je dit krijgt:[code:1:6e4b13ff95]$tonguit = '/\s(:P)/';[/code:1:6e4b13ff95]Let er ook op dat je in smilies als [b:6e4b13ff95]:)[/b:6e4b13ff95] en [b:6e4b13ff95]:([/b:6e4b13ff95] je de ronde haken moet escapen, dus dat wordt sowieso [b:6e4b13ff95]:\)[/b:6e4b13ff95] en [b:6e4b13ff95]:\([/b:6e4b13ff95], anders weet de parser niet meer waar de regexp nou eigenlijk begint danwel eindigt. Succes! - Bas Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen