Avatar billede Noone Nybegynder
27. april 2004 - 00:07 Der er 14 kommentarer og
1 løsning

Erstatte smily kode med smily billede

Jeg har nu søgt lidt og ikke kunne finde svar på mit spøgsmål.

Problemet er at jeg skal have en smily kode i formen [s:smiley] erstattet af et billede.

Jeg har prøvet med følgende, som er omskrevet fra et ASP eksempel jeg fandt, men af en eller anden grund vælger den bare at ignorere smiley koden. Der står altså stadig [s:smiley] i teksten efter den har været igennem følgende:

$tekst = eregi_replace("\[s:([a-z0-9_-]+)\]","<img src=\"{$imgsrv}/smilies/ps/img/\\1.gif\" align=\"middle\" border=\"0\" alt=\"\\1\" title=\"\\1\">",$tekst);

Hvor er det lige det går galt?
Avatar billede krydset Nybegynder
27. april 2004 - 00:11 #1
$string = "Hejsa :-D";
$string = str_replace(":-D", "<img src='din_smily.jpg'>", $string);
echo $string;


prøv det
Avatar billede Noone Nybegynder
27. april 2004 - 00:18 #2
krydset > Det rammer jo ikke [s:slimy] de andre, mere simple har jeg løst, dog via et array og strtr istedet ;)
Avatar billede olebole Juniormester
27. april 2004 - 00:27 #3
<ole>

Hvorfor så ikke løse resten på samme måde?  :)
RegExp er ikke nær så hurtig som strtr() ... og slert ikke 'ereg' funktionerne. Skal du endelig bruge RegExp, bør du bruge 'preg' funktionerne - de er langt hurtigere, men stadig ikke så godt performende som strtr() eller str_replace()

/mvh
</bole>
Avatar billede Noone Nybegynder
27. april 2004 - 00:31 #4
olebole > Fordi der er tale om flere hundrede smilies, og det skulle gerne være nemt og koden skulle være overskuelig.

For at illustrere hvad det handler om, kan man eventuelt kigge på www.chano.arto.dk (Sitet er meget langsomt i dagtimerne.). Der er altså tale om at dem der skal indtaste det der skal behandles af scriptet, skal kunne bruge noget de kender. Det er blandt andet nogle smilies man indsætter i formen [s:noget]

Det er tilsyneladende kombinationen s: der går i hårknude, da den fint kan oversætte noget i formen [noget]
Avatar billede Noone Nybegynder
27. april 2004 - 00:33 #5
olebole > Desuden betyder det ikke så meget om det er eregi_replace eller preg_replace, nu var det eksempel jeg fik fat i som ASP dog ikke med perl style regexps.
Avatar billede olebole Juniormester
27. april 2004 - 01:17 #6
$s = "[s:noget] ljlj lihkl hklh khkjhk jhk [s:nogetAndet]";
$nyS = preg_replace( "/\[s:([^\]]*)\]/", "<img src=\"\\1.gif\">", $s );
print $nyS;

/mvh
Avatar billede Noone Nybegynder
27. april 2004 - 02:35 #7
OleBole > Og den reakere KUN på a-z, 0-9 _ og -?
Avatar billede Noone Nybegynder
27. april 2004 - 02:41 #8
OleBole > Lader til at det fungere efter hensigten.. Kunne jeg få en forklaring på hvad de forskellige dele betyder, nu du alligevel skal skrive noget for at få point? ;)
Avatar billede olebole Juniormester
27. april 2004 - 03:27 #9
Ja, jeg havde skrevet en helvedes lang forklaring (RegExp er temmelig bøvlede at forklare i ord) ... trykkede 'Send' og blev logget ud, fordi denne joke af et forum åbenbart ikke kan opdateres uden hele sitet lukkes ned.
Et forum, hvor man skal kunne lære at kode bedre ...!?!!??!!! *host-host*
Hvorfor mon ordet 'ynkeligt' trænger sig så kraftigt på i min bevidsthed?  :o|

Jeg orker ikke at gentage hele smøren, men du kan få et par links til info om PHP's implementering af Perl-RegExp:
  http://dk.php.net/manual/en/pcre.pattern.syntax.php
  http://dk2.php.net/preg_replace
/mvh
Avatar billede olebole Juniormester
27. april 2004 - 03:28 #10
... og det var et svar
Avatar billede krydset Nybegynder
27. april 2004 - 09:44 #11
Du kan da bare indsætte s:slimy i stedet

$string = "Hey s:slimy boy";
$string = str_replace("s:slimy", "<img src='slimy_smily.jpg'>", $string);
echo $string;
Avatar billede krydset Nybegynder
27. april 2004 - 09:46 #12
og selvom der er tale om flere 100 smilys kan du da bare lave koden på en side og include den når der er brug for den, så slipper du får at blande det sammen med det andet kode du har
Avatar billede olebole Juniormester
27. april 2004 - 18:01 #13
krydset >> Fidusen er:
1. at bruge én linie i stedet for at afvikle 100 forskellige funktioner
2. at lave et vedligeholdelsesfrit system (ingen nye smilies skal tilføjes i fremtiden)
Avatar billede Noone Nybegynder
28. april 2004 - 03:15 #14
olebole > Ja, ja, det kunne jeg tænke mig til. Jeg er generalt begyndt at kopiere længere tekster inden jeg afsender dem, dog har jeg endnu ikke haft problemer med at de er blevet slettet i FireFox, har altid kunnet gå tilbage og kopiere teksten hvis sitet var nede.

Kigger på de der sider ved lejlighed.

krydset > Ja, hvis der var et par stykker, have jeg nok gjort det. Men jeg vil, som OleBole forklare, undgå nogen sinde at skulle opdatere, samt kun rette et sted såfremt slimy URL'en skiftes (Det er på en server jeg ikke selv har kontrol over). Desuden er det nærmest umuligt for mig at danne mig et overblik over koderne til de forskellige slimies (De er i en popupliste på sitet, som jeg gerne vil undgå at bruge tid på at gennemgå). Og desuden er det alligevel sådan det forgår på sitet i forvejen, så hvorfor ikke lave noget der er kompatibelt med?

Hele resultatet af anstrengelserne kan desuden ses på www.chano.arto.dk, hvis man skulle være nysgerrig.

Og igen, mange tak til OleBole for en løsning på problemet.
Avatar billede olebole Juniormester
28. april 2004 - 03:45 #15
Nu er blodet igen faldet til under 80 grader, så jeg forsøger igen  :)

\[s:([^\]]*)\] er selve indholdet af regExp'en. Da regExp bruger '[' og ']' til andre ting, skal de escapes med en back-slash, hvis de skal findes som tegn i teksten.
Dermed er de yderste tegn forklaret - og vi har dette tilbage: s:([^\]]*)

's:' siger vel sig selv - og det efterlader os med parentesen.
Det fundne indhold i en parentes i en regExp kan man genbruge i replace-delen med '\\1' eller '$1'. Er der flere parenteser, kan man referere til den næste parentes med '\\2' eller '$2'.

Deler vi tegnene i parentesen lidt op efter logik, kan vi skrive den som: ([ ^ \] ]*).
[A]* betyder et antal A'er ... 0 eller flere. [^\]]* betyder således 0 eller flere tegn - undtagen ']'.
'Hatten' ^ betyder nemlig i firkantede brackets: "Alt andet end det tegn, der følger" - og ']' skal jo escapes som før.

Da dette udtryk står i en parentes, kan jeg genbruge det fundne, når jeg konstruerer billedets 'sovs' med: <img src=\"\\1.gif\">.
\\1 refererer simpelthen til de tegn, vi fandt i parentesen.

Håber, det hjalp lidt på forståelsen  :)
/mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester