Avatar billede amews_aj Nybegynder
15. marts 2005 - 20:39 Der er 15 kommentarer og
1 løsning

Erstat ikke hvis smiley er inde for <code> tag?

Har haft dette oppe før, men fik aldrig løst det helt...

har fået denne kode

<?php
$str = "Her er en tekst med smiley i :D  <br> <code>Her er en uden smiley :D </code> <br> Her er en med smiley :D<code><br>Her er en til uden smiley :D</code><br>HEr er en med smiley :D";

$codepos = strpos($str, "<code>");
$notcodepos = strpos($str, "</code>")+7;

$str1 = substr($str, 0, $codepos);
$str3 = substr($str, $notcodepos, strlen($str));
$str4 = str_replace($str1, "", $str);
$str2 = str_replace($str3, "", $str4);
$str1 = str_replace(":D", "SMILEY!!", $str1);
$str3 = str_replace(":D", "SMILEY!!", $str3);

$nystr = $str1.$str2.$str3;
print($nystr);


?>


Den skal gøre sådan at hvis der er en smiley i alm. tekst, skal den erstattes med et billede (SMILEY!!)
HVis :D er inden i et <code> tag, så skal den ikke erstatte den med billedet, følgende kode giver:

Her er en tekst med smiley i SMILEY!!
Her er en uden smiley :D                  <<< OK
Her er en med smiley SMILEY!!
Her er en til uden smiley SMILEY!!        <<< skulle stå :D
HEr er en med smiley SMILEY!!

Håber i forstår, den er lidt kringlet, ellers må i spørge...
Avatar billede amews_aj Nybegynder
15. marts 2005 - 20:54 #1
Altså det den gør, er at den kun "springer over" <code> i første omgang, men hvis der kommer en code mere i teksten, så erstatter den bare, hvilket den ikke skal...

kan man på nogen måde få den til at gøre det det antal gange <code> står i teksten?
Avatar billede barklund Nybegynder
15. marts 2005 - 21:05 #2
Jeg har gjort det før på den måde, at først løber jeg hele teksten igennem og finder alle <code>.*</code> blokke, klipper dem ud og erstatter dem med [[1]] for nummer 1 og så videre. Derefter laver jeg mine erstatninger. Så sætter jeg koden tilbage igen.

Jeg har brugt det på artikelsystemet her http://actionscript.dk/artikler/?a=22&s=2 netop for at kunne erstatte linjeskift uden for kodeblokke korrekt (samt highlighte andre ting), men inden for kodeblokke skal der ikke formatteres overhovedet.

Jeg ved ikke, om det kan laves direkte i pcre, men jeg kunne ikke komme på noget.

--
Morten Barklund
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:05 #3
hehe, meget let løsning, jeg vil nøjes med smileys i min gæstebog, hører ikke så meget til i et forum...
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:06 #4
øhh, forkert link?
Avatar billede barklund Nybegynder
15. marts 2005 - 21:07 #5
What?
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:08 #6
kan ikke se hvad det matematik der har med det at gøre?
Avatar billede barklund Nybegynder
15. marts 2005 - 21:08 #7
Jeg siger blot, at en algoritme som jeg har beskrevet er baggrunden for det artikelsystem, som du kan se resultatet af på linket.
Avatar billede barklund Nybegynder
15. marts 2005 - 21:08 #8
Indholdet skal du ikke tage dig af jo :)
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:10 #9
Nåhh.... :P

Men hvad er koden til det, kan du ikke give mig den eller hva?
Avatar billede barklund Nybegynder
15. marts 2005 - 21:11 #10
Jeg har da forklaret det? Det er ganske ligetil.
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:14 #11
Ja, men kan ikke helt gennesmkue det, når det går over i den genre php er jeg altså langt nede, men vil jo gerne have det vist samtidig med at jeg har fået det forklaret, så kan jeg selv prøve det lidt af :D

Ville være meget taknemlig hvis jeg kunne få koden serveret på et sølvfad .... :E
Avatar billede barklund Nybegynder
15. marts 2005 - 21:16 #12
Men jeg ville nok lave det som:

        $c = "her er din tekst";
    preg_match_all("#<code>(.*?)</code>#is", $c, $matches);
    foreach($matches[0] as $id => $match) {
        $c = str_replace($match, "[[".$id."]]", $c);
    }
    $smileys = array(
            ":)" => "SMILEY",
            ":D" => "GLAD SMILEY"
        );
    $c = preg_replace(array_keys($smileys), array_values($smileys), $c);
        $re_pattern = "#\[\[(\d+)\]\]#e";
    $re_replace = "\"<code>\".\$matches[1][\\1].\"</code>\"";
    $c = preg_replace($re_pattern, $re_replace, $c);

Prøv engang :)

--
Morten Barklund
Avatar billede barklund Nybegynder
15. marts 2005 - 21:17 #13
hov, den første replace skal selvfølgelig være str_replace:

$c = str_replace(array_keys($smileys), array_values($smileys), $c);

:)
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:21 #14
YES KANON, NØJ DET HAR JEG LEDT LÆNGE EFTER :D

SMID SVAR :D
Avatar billede barklund Nybegynder
15. marts 2005 - 21:22 #15
Yesyes, men pas lidt på den der Caps Lock - den er lidt farlig :/
Avatar billede amews_aj Nybegynder
15. marts 2005 - 21:30 #16
.. var godt nok shift .. blev lidt glad så kom til at råbe... :P

Tusind tak for hjælpen :D
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