Ga naar inhoud

[php of javascript?] smilies replace


Aanbevolen berichten

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...
Link naar reactie
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
Link naar reactie
[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:
Link naar reactie
[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
Link naar reactie
[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
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...