21. august 2005 - 22:49
Der er
19 kommentarer og 1 løsning
preg_replace img-tag
Jeg har svært ved at få en reg. expr til at fungere: Jeg vil erstatte alle img-tag hvor værdien src slutter på fx "smily-cry.gif": <img (.*?) src="(.*?)smiley-cry.gif"> Den skal også tage højde for at der kan være skrevet værdier ind før src. Hvad skal jeg gøre for at få ovenstående til at virke?
Annonceindlæg fra Barco
21. august 2005 - 22:55
#1
Hvis der ikke er noget immellem img og src vil dit pattern krøve at der er to blanktegn. Det er der næppe , så prøv f.eks. med denne: <img (.*?)\s*src="(.*?)smiley-cry.gif">
21. august 2005 - 22:55
#2
Du må gerne vise hvad du har prøvet, og hvorfor det ikke virker. Men (.*?)smiley-cry.gif"> er nok lidt for generel, da den kan smutte vilkårligt langt frem i søgen efter smiley-cry. Prøv at erstatte (.*?) med ([^>]*) så du er sikker på den stopper når dit img-tag er færdigt.
21. august 2005 - 22:57
#3
Jeg har prøvet følgende: function emoctions2acsii($msg_text) { $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':)', 'smiley-embarassed.gif'=>':)', 'smiley-foot-in-mouth.gif'=>':)', 'smiley-frown.gif'=>':)', 'smiley-innocent.gif'=>':)', 'smiley-kiss.gif'=>':)', 'smiley-laughing.gif'=>':)', 'smiley-money-mouth.gif'=>':)', 'smiley-sealed.gif'=>':)', 'smiley-smile.gif'=>':)', 'smiley-surprised.gif'=>':)', 'smiley-tongue-out.gif'=>':)', 'smiley-undecided.gif'=>':)', 'smiley-wink.gif'=>':)', 'smiley-yell.gif'=>':)'); $str = $msg_text; foreach ($_VALID_SMILIES as $key => $value) { $str = preg_replace('<img (.*?) src="(.*?)'.$key.'">', $value, $str); } return $str; }
21. august 2005 - 23:02
#4
Jeg kan også se at der skal højde for at img-taget bliver skrevet fx sådan: <img border=\"0\" src=\"/tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif\" />
21. august 2005 - 23:05
#5
Der er ganske rigtigt en meget vigtig detalje erikjacobsen kom med der. Så vidt jeg kan bedømme så er det hele image-taggen m/ indhold som du vil have ændret til en tekst-version: function emoctions2acsii($msg_text) { $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':)', 'smiley-embarassed.gif'=>':)', 'smiley-foot-in-mouth.gif'=>':)', 'smiley-frown.gif'=>':)', 'smiley-innocent.gif'=>':)', 'smiley-kiss.gif'=>':)', 'smiley-laughing.gif'=>':)', 'smiley-money-mouth.gif'=>':)', 'smiley-sealed.gif'=>':)', 'smiley-smile.gif'=>':)', 'smiley-surprised.gif'=>':)', 'smiley-tongue-out.gif'=>':)', 'smiley-undecided.gif'=>':)', 'smiley-wink.gif'=>':)', 'smiley-yell.gif'=>':)'); $str = $msg_text; foreach ($_VALID_SMILIES as $key => $value) { $str = preg_replace('/(<img .*?src="[^>]*?' . $key . '">)/i', $value, $str); } return $str; }
21. august 2005 - 23:07
#6
Se venligst bort fra den forige kode - der var en pinlig fejl i. Brug denne: function emoctions2acsii($msg_text) { $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':)', 'smiley-embarassed.gif'=>':)', 'smiley-foot-in-mouth.gif'=>':)', 'smiley-frown.gif'=>':)', 'smiley-innocent.gif'=>':)', 'smiley-kiss.gif'=>':)', 'smiley-laughing.gif'=>':)', 'smiley-money-mouth.gif'=>':)', 'smiley-sealed.gif'=>':)', 'smiley-smile.gif'=>':)', 'smiley-surprised.gif'=>':)', 'smiley-tongue-out.gif'=>':)', 'smiley-undecided.gif'=>':)', 'smiley-wink.gif'=>':)', 'smiley-yell.gif'=>':)'); $str = $msg_text; foreach ($_VALID_SMILIES as $key => $value) { $str = preg_replace('/(<img [^>]*src="[^>]*' . $key . '">)/i', $value, $str); } return $str; }
21. august 2005 - 23:11
#7
Det virker ikke, og jeg vil tro at det skyldes mønsteret? I dit script kigger du efter <img src="hvad/som/helst/smiley-cry.gif"> hvor det der skal erstattes på ser sådan ud: <img src=\"hvad/som/helst/smiley-cry.gif\" />
21. august 2005 - 23:13
#8
Din detalje var også vigtig, nielle, *g*. Tilføj lige muligheden for at afslutte som fx 1) ..."> 2) ..."/> 3) ..." />
21. august 2005 - 23:16
#9
function emoctions2acsii($msg_text) { $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':)', 'smiley-embarassed.gif'=>':)', 'smiley-foot-in-mouth.gif'=>':)', 'smiley-frown.gif'=>':)', 'smiley-innocent.gif'=>':)', 'smiley-kiss.gif'=>':)', 'smiley-laughing.gif'=>':)', 'smiley-money-mouth.gif'=>':)', 'smiley-sealed.gif'=>':)', 'smiley-smile.gif'=>':)', 'smiley-surprised.gif'=>':)', 'smiley-tongue-out.gif'=>':)', 'smiley-undecided.gif'=>':)', 'smiley-wink.gif'=>':)', 'smiley-yell.gif'=>':)'); $str = $msg_text; foreach ($_VALID_SMILIES as $key => $value) { $str = preg_replace('/(<img [^>]*src=\?"[^>]*' . $key . '\?"\s*\/?>)/i', $value, $str); } return $str; }
21. august 2005 - 23:22
#10
Der kommer stadig et img-tag ud af den.. <img border=\"0\" src=\"/tiny_mce/plugins/emotions/images/smiley-cry.gif\" />
21. august 2005 - 23:23
#11
Prøv denne variation: function emoctions2acsii($msg_text) { $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':)', 'smiley-embarassed.gif'=>':)', 'smiley-foot-in-mouth.gif'=>':)', 'smiley-frown.gif'=>':)', 'smiley-innocent.gif'=>':)', 'smiley-kiss.gif'=>':)', 'smiley-laughing.gif'=>':)', 'smiley-money-mouth.gif'=>':)', 'smiley-sealed.gif'=>':)', 'smiley-smile.gif'=>':)', 'smiley-surprised.gif'=>':)', 'smiley-tongue-out.gif'=>':)', 'smiley-undecided.gif'=>':)', 'smiley-wink.gif'=>':)', 'smiley-yell.gif'=>':)'); $str = stripslashes($msg_text); foreach ($_VALID_SMILIES as $key => $value) { $str = preg_replace('/(<img [^>]*src="[^>]*' . $key . '"\s*\/?>)/i', $value, $str); } return $str; }
21. august 2005 - 23:23
#12
Og du mener, der rent faktisk står \-ere foran "-erne? Hvorfor dog?
21. august 2005 - 23:24
#13
Ok, gennembrud.. Jeg kørte en stripslashes på $msg_text og skrev preg_replace om til: $str = preg_replace('/(<img [^>]*src="[^>]*' . $key . '"\s*\/?>)/i', $value, $str); Og nu erstatter den rigtigt.. så det er \ foran " den ikke kan håndtere?
21. august 2005 - 23:25
#14
Ja, det er noget som tinymce helt automatisk gør vil jeg tro..
21. august 2005 - 23:25
#15
erikjacobsen, du plejer at springe point over, så jeg skal bare bede nielle om at lægge et svar?
21. august 2005 - 23:27
#16
Svar :^)
21. august 2005 - 23:28
#17
Mange tak for hjælpen begge to! Fortsat god aften :)
21. august 2005 - 23:29
#18
Hvis din PHP er sat til automatisk "addslashes" og tinymce også gør det, ja så får du selvfølgelig den ekstra. Men det bør ikke være tilfældet. Et portabelt script(stump) bør checke om den automatiske er sat til, og så vælge ud fra det. Du er sikker på du ikke selv har en addslashes gemt et sted.... ? Og så er "lektionen" igen nok, at man altid skal gemme inddata i så original form som muligt. Havde du gemt med ;) osv i stedet for <img>-tags, havde du haft færre problemer. Så skulle du så enten have lavet en substituering ved visning, eller yderligere have gemt et formatteret felt. Men måske er det igen tinymce der gør noget bag din ryg. Whatever - jeg filosoferer bare lidt...
21. august 2005 - 23:36
#19
Jeg har rimelig styr på mit backend script, men jeg har ingen kontrol over i hvilken formatering tinymce komponentet sender data til server-side. Man kan sikkert ændre dets indstillinger, men så meget har jeg ikke kigget på det..
21. august 2005 - 23:38
#20
Hvis i har nogen forslag til tegnudgavnet af disse smilies, så er de meget velkomne :-) Jeg har det her indtil videre: $_VALID_SMILIES = array('smiley-cry.gif'=>':\'(', 'smiley-cool.gif'=>':-)', 'smiley-embarassed.gif'=>'', 'smiley-foot-in-mouth.gif'=>'%', 'smiley-frown.gif'=>'', 'smiley-innocent.gif'=>'¤-)', 'smiley-kiss.gif'=>'', 'smiley-laughing.gif'=>'', 'smiley-money-mouth.gif'=>'$-)', 'smiley-sealed.gif'=>':|', 'smiley-smile.gif'=>':D', 'smiley-surprised.gif'=>':o', 'smiley-tongue-out.gif'=>':p', 'smiley-undecided.gif'=>'', 'smiley-wink.gif'=>';-)', 'smiley-yell.gif'=>'');
Kurser inden for grundlæggende programmering