webForumDet fria alternativet

Strul med preg_replace

12 svar · 496 visningar · startad av Steam

SteamMedlem sedan juli 2003169 inlägg
#1

Det är som så att jag försöker omvandla smileysar till faktiska bilder när de visas på en sida och då kör jag preg_replace.

Problem som jag stöter på är när jag kallar en smileys

:D

och en annan för

>:D<

och då gör jag det på dete här sättet:

$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" />', $str);  
$str = preg_replace('/>:D</', '<img src="/img/smileys/7.gif" />', $str);

När jag i texteditorn sparar exempelvis de två smileysarna resulterar det i två likadana smileysar med ett ">"-tecken framför den andra sileysen. Jag får alltså inte två olika smileysar. Någon som är duktig på preg_replace och kan förklara hur jag ska göra?

Tack.

GeinMedlem sedan sep. 20005 700 inlägg
#2

Byt plats på de två preg_replace-raderna så löser du problemaktiken. Problemet är ju att den ena smileyn är en delmängd av en annan smiley.

SteamMedlem sedan juli 2003169 inlägg
#3

Tyvärr inte. Det beror helt och hållet på i vilken ordning man skickar de två. Skickar du först

>:D<

sedan

:D

då blir det rätt. Gör du tvärt om blir det fel.

GeinMedlem sedan sep. 20005 700 inlägg
#4

Steam skrev:

Tyvärr inte. Det beror helt och hållet på i vilken ordning man skickar de två. Skickar du först

>:D<

sedan

:D

då blir det rätt. Gör du tvärt om blir det fel.

Ja, jag sa ju det.

SteamMedlem sedan juli 2003169 inlägg
#5

Gein skrev:

Ja, jag sa ju det.

Jag tror att vi missförstår varandra lite där.
Själva variabler ligger i en funktion och de har jag bytt plats med, no problems.

Problemet uppstår vid postningen av smileysarna. Gör man det åt ena hållet går det bra men byter man ordning skiter det sig. Jag kan väl knappast veta i vilken ordning besökarna kommer att posta dessa smileysar?

GeinMedlem sedan sep. 20005 700 inlägg
#6

Steam skrev:

Jag tror att vi missförstår varandra lite där.
Själva variabler ligger i en funktion och de har jag bytt plats med, no problems.

Problemet uppstår vid postningen av smileysarna. Gör man det åt ena hållet går det bra men byter man ordning skiter det sig. Jag kan väl knappast veta i vilken ordning besökarna kommer att posta dessa smileysar?

Nej, det behöver du inte veta heller.
Du kör

 
$str = preg_replace('/>:D</', '<img src="/img/smileys/7.gif" />', $str); 
$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" />', $str);

Då kommer den först att ersätta alla

>:D<

och därefter alla kvarvarande

:D
SteamMedlem sedan juli 2003169 inlägg
#7

Tyvärr får jag det inte att fungera. Skriver jag såhär:

>:D<
:D
>:D<

i min post så blir det fel.

Först kommer rätt bild 7.gif sedan kommer 4.gif och sedan kommer 4.gif igen.

Skriver jag

:D
>:D<
:D

får jag önskar resultat.

GeinMedlem sedan sep. 20005 700 inlägg
#8

Då verkar det vara något annat fel så det känns som att man behöver mer kod för att reda ut problemet.

Se detta enkla exempel:

<?php

$str=">:D< :D >:D<";

$str = preg_replace('/>:D</', '<img src="/img/smileys/7.gif" />', $str);
$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" />', $str); 

echo $str;

?>

Returnerar

<img src="/img/smileys/7.gif" /> <img src="/img/smileys/4.gif" /> <img src="/img/smileys/7.gif" />
SteamMedlem sedan juli 2003169 inlägg
#9

Här har du hela funktionen

function outputText( $output) {

		$str = stripslashes( html_entity_decode( $output, ENT_COMPAT, 'UTF-8' ) ); 
		$str = strip_tags( $str );
		$str = nl2br( $str );
			
		$str = preg_replace( '/:\)/', '<img src="/img/smileys/1.gif" />', $str);
		$str = preg_replace('/:\(/', '<img src="/img/smileys/2.gif" alt="" />', $str);
		$str = preg_replace('/;\)/', '<img src="/img/smileys/3.gif" alt="" />', $str);
		$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" alt="" />', $str);
		$str = preg_replace('/;;\)/', '<img src="/img/smileys/5.gif" alt="" />', $str);
		$str = preg_replace('/>:D</', '<img src="/img/smileys/6.gif" alt="" />', $str);
		$str = preg_replace('/:-\//', '<img src="/img/smileys/7.gif" alt="" />', $str);
		$str = preg_replace('/:x/', '<img src="/img/smileys/8.gif" alt="" />', $str);
		$str = preg_replace('/:"\>/', '<img src="/img/smileys/9.gif" alt="" />', $str);
		$str = preg_replace('/:P/', '<img src="/img/smileys/10.gif" alt="" />', $str);
		$str = preg_replace('/:-*/', '<img src="/img/smileys/11.gif" alt="" />', $str);
		$str = preg_replace('/=\(\(/', '<img src="/img/smileys/12.gif" alt="" />', $str);
		$str = preg_replace('/:-O/', '<img src="/img/smileys/13.gif" alt="" />', $str);
		$str = preg_replace('/X\(/', '<img src="/img/smileys/14.gif" alt="" />', $str);
		$str = preg_replace('/:>/', '<img src="/img/smileys/15.gif" alt="" />', $str);
		$str = preg_replace('/B-\)/', '<img src="/img/smileys/16.gif" alt="" />', $str);
		$str = preg_replace('/:-S/', '<img src="/img/smileys/17.gif" alt="" />', $str);
		$str = preg_replace('/\#:-S/', '<img src="/img/smileys/18.gif" alt="" />', $str);
		$str = preg_replace('/>:\)/', '<img src="/img/smileys/19.gif" alt="" />', $str);
		$str = preg_replace('/:\(\(/', '<img src="/img/smileys/20.gif" alt="" />', $str);
		$str = preg_replace('/:\)\)/', '<img src="/img/smileys/21.gif" alt="" />', $str);
		$str = preg_replace('/:\|/', '<img src="/img/smileys/22.gif" alt="" />', $str);
		$str = preg_replace('/\/:\)/', '<img src="/img/smileys/23.gif" alt="" />', $str);
		$str = preg_replace('/=\)\)/', '<img src="/img/smileys/24.gif" alt="" />', $str);
		$str = preg_replace('/O:-\)/', '<img src="/img/smileys/25.gif" alt="" />', $str);
		$str = preg_replace('/:-B/', '<img src="/img/smileys/26.gif" alt="" />', $str);
		$str = preg_replace('/=;/', '<img src="/img/smileys/27.gif" alt="" />', $str);
		$str = preg_replace('/I-\)/', '<img src="/img/smileys/28.gif" alt="" />', $str);
		$str = preg_replace('/8-\|/', '<img src="/img/smileys/29.gif" alt="" />', $str);
		$str = preg_replace('/L-\)/', '<img src="/img/smileys/30.gif" alt="" />', $str);
		$str = preg_replace('/:-&amp;/', '<img src="/img/smileys/31.gif" alt="" />', $str);
		$str = preg_replace('/:-$/', '<img src="/img/smileys/32.gif" alt="" />', $str);
		$str = preg_replace('/\[-\(/', '<img src="/img/smileys/33.gif" alt="" />', $str);
		$str = preg_replace('/:O\)/', '<img src="/img/smileys/34.gif" alt="" />', $str);
		$str = preg_replace('/8-}/', '<img src="/img/smileys/35.gif" alt="" />', $str);
		$str = preg_replace('/<:-P/', '<img src="/img/smileys/36.gif" alt="" />', $str);
		$str = preg_replace('/\(:\|/', '<img src="/img/smileys/37.gif" alt="" />', $str);
		$str = preg_replace('/=P~/', '<img src="/img/smileys/38.gif" alt="" />', $str);
		$str = preg_replace('/:-?/', '<img src="/img/smileys/39.gif" alt="" />', $str);
		$str = preg_replace('/\#-o/', '<img src="/img/smileys/40.gif" alt="" />', $str);
		$str = preg_replace('/=D>/', '<img src="/img/smileys/41.gif" alt="" />', $str);
		$str = preg_replace('/:-SS/', '<img src="/img/smileys/42.gif" alt="" />', $str);
		$str = preg_replace('/@-\)/', '<img src="/img/smileys/43.gif" alt="" />', $str);
		$str = preg_replace('/:^o/', '<img src="/img/smileys/44.gif" alt="" />', $str);
		$str = preg_replace('/:-w/', '<img src="/img/smileys/45.gif" alt="" />', $str);
		$str = preg_replace('/:-</', '<img src="/img/smileys/46.gif" alt="" />', $str);
		$str = preg_replace('/>:P/', '<img src="/img/smileys/47.gif" alt="" />', $str);
		$str = preg_replace('/<\):\)/', '<img src="/img/smileys/48.gif" alt="" />', $str);
		$str = preg_replace('/:\)]/', '<img src="/img/smileys/49.gif" alt="" />', $str);
		$str = preg_replace('/:-c/', '<img src="/img/smileys/50.gif" alt="" />', $str);
		$str = preg_replace('/~X\(/', '<img src="/img/smileys/51.gif" alt="" />', $str);
		$str = preg_replace('/:-h/', '<img src="/img/smileys/52.gif" alt="" />', $str);
		$str = preg_replace('/:-t/', '<img src="/img/smileys/53.gif" alt="" />', $str);
		$str = preg_replace('/8->/', '<img src="/img/smileys/54.gif" alt="" />', $str);
		$str = preg_replace('/X_X/', '<img src="/img/smileys/55.gif" alt="" />', $str);
		$str = preg_replace('/:!!/', '<img src="/img/smileys/56.gif" alt="" />', $str);
		$str = preg_replace('/\\m\//', '<img src="/img/smileys/57.gif" alt="" />', $str);
		$str = preg_replace('/:-q/', '<img src="/img/smileys/58.gif" alt="" />', $str);
		$str = preg_replace('/:-bd/', '<img src="/img/smileys/59.gif" alt="" />', $str);
		$str = preg_replace('/^\#\(^/', '<img src="/img/smileys/60.gif" alt="" />', $str);
		$str = preg_replace('/:ar!/', '<img src="/img/smileys/61.gif" alt="" />', $str);
	}
GeinMedlem sedan sep. 20005 700 inlägg
#10

Steam skrev:

Här har du hela funktionen

function outputText( $output) {

		$str = stripslashes( html_entity_decode( $output, ENT_COMPAT, 'UTF-8' ) ); 
		$str = strip_tags( $str );
		$str = nl2br( $str );
			
		$str = preg_replace( '/:\)/', '<img src="/img/smileys/1.gif" />', $str);
		$str = preg_replace('/:\(/', '<img src="/img/smileys/2.gif" alt="" />', $str);
		$str = preg_replace('/;\)/', '<img src="/img/smileys/3.gif" alt="" />', $str);
		$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" alt="" />', $str);
		$str = preg_replace('/;;\)/', '<img src="/img/smileys/5.gif" alt="" />', $str);
		$str = preg_replace('/>:D</', '<img src="/img/smileys/6.gif" alt="" />', $str);
		$str = preg_replace('/:-\//', '<img src="/img/smileys/7.gif" alt="" />', $str);
		$str = preg_replace('/:x/', '<img src="/img/smileys/8.gif" alt="" />', $str);
		$str = preg_replace('/:"\>/', '<img src="/img/smileys/9.gif" alt="" />', $str);
		$str = preg_replace('/:P/', '<img src="/img/smileys/10.gif" alt="" />', $str);
		$str = preg_replace('/:-*/', '<img src="/img/smileys/11.gif" alt="" />', $str);
		$str = preg_replace('/=\(\(/', '<img src="/img/smileys/12.gif" alt="" />', $str);
		$str = preg_replace('/:-O/', '<img src="/img/smileys/13.gif" alt="" />', $str);
		$str = preg_replace('/X\(/', '<img src="/img/smileys/14.gif" alt="" />', $str);
		$str = preg_replace('/:>/', '<img src="/img/smileys/15.gif" alt="" />', $str);
		$str = preg_replace('/B-\)/', '<img src="/img/smileys/16.gif" alt="" />', $str);
		$str = preg_replace('/:-S/', '<img src="/img/smileys/17.gif" alt="" />', $str);
		$str = preg_replace('/\#:-S/', '<img src="/img/smileys/18.gif" alt="" />', $str);
		$str = preg_replace('/>:\)/', '<img src="/img/smileys/19.gif" alt="" />', $str);
		$str = preg_replace('/:\(\(/', '<img src="/img/smileys/20.gif" alt="" />', $str);
		$str = preg_replace('/:\)\)/', '<img src="/img/smileys/21.gif" alt="" />', $str);
		$str = preg_replace('/:\|/', '<img src="/img/smileys/22.gif" alt="" />', $str);
		$str = preg_replace('/\/:\)/', '<img src="/img/smileys/23.gif" alt="" />', $str);
		$str = preg_replace('/=\)\)/', '<img src="/img/smileys/24.gif" alt="" />', $str);
		$str = preg_replace('/O:-\)/', '<img src="/img/smileys/25.gif" alt="" />', $str);
		$str = preg_replace('/:-B/', '<img src="/img/smileys/26.gif" alt="" />', $str);
		$str = preg_replace('/=;/', '<img src="/img/smileys/27.gif" alt="" />', $str);
		$str = preg_replace('/I-\)/', '<img src="/img/smileys/28.gif" alt="" />', $str);
		$str = preg_replace('/8-\|/', '<img src="/img/smileys/29.gif" alt="" />', $str);
		$str = preg_replace('/L-\)/', '<img src="/img/smileys/30.gif" alt="" />', $str);
		$str = preg_replace('/:-&amp;/', '<img src="/img/smileys/31.gif" alt="" />', $str);
		$str = preg_replace('/:-$/', '<img src="/img/smileys/32.gif" alt="" />', $str);
		$str = preg_replace('/\[-\(/', '<img src="/img/smileys/33.gif" alt="" />', $str);
		$str = preg_replace('/:O\)/', '<img src="/img/smileys/34.gif" alt="" />', $str);
		$str = preg_replace('/8-}/', '<img src="/img/smileys/35.gif" alt="" />', $str);
		$str = preg_replace('/<:-P/', '<img src="/img/smileys/36.gif" alt="" />', $str);
		$str = preg_replace('/\(:\|/', '<img src="/img/smileys/37.gif" alt="" />', $str);
		$str = preg_replace('/=P~/', '<img src="/img/smileys/38.gif" alt="" />', $str);
		$str = preg_replace('/:-?/', '<img src="/img/smileys/39.gif" alt="" />', $str);
		$str = preg_replace('/\#-o/', '<img src="/img/smileys/40.gif" alt="" />', $str);
		$str = preg_replace('/=D>/', '<img src="/img/smileys/41.gif" alt="" />', $str);
		$str = preg_replace('/:-SS/', '<img src="/img/smileys/42.gif" alt="" />', $str);
		$str = preg_replace('/@-\)/', '<img src="/img/smileys/43.gif" alt="" />', $str);
		$str = preg_replace('/:^o/', '<img src="/img/smileys/44.gif" alt="" />', $str);
		$str = preg_replace('/:-w/', '<img src="/img/smileys/45.gif" alt="" />', $str);
		$str = preg_replace('/:-</', '<img src="/img/smileys/46.gif" alt="" />', $str);
		$str = preg_replace('/>:P/', '<img src="/img/smileys/47.gif" alt="" />', $str);
		$str = preg_replace('/<\):\)/', '<img src="/img/smileys/48.gif" alt="" />', $str);
		$str = preg_replace('/:\)]/', '<img src="/img/smileys/49.gif" alt="" />', $str);
		$str = preg_replace('/:-c/', '<img src="/img/smileys/50.gif" alt="" />', $str);
		$str = preg_replace('/~X\(/', '<img src="/img/smileys/51.gif" alt="" />', $str);
		$str = preg_replace('/:-h/', '<img src="/img/smileys/52.gif" alt="" />', $str);
		$str = preg_replace('/:-t/', '<img src="/img/smileys/53.gif" alt="" />', $str);
		$str = preg_replace('/8->/', '<img src="/img/smileys/54.gif" alt="" />', $str);
		$str = preg_replace('/X_X/', '<img src="/img/smileys/55.gif" alt="" />', $str);
		$str = preg_replace('/:!!/', '<img src="/img/smileys/56.gif" alt="" />', $str);
		$str = preg_replace('/\\m\//', '<img src="/img/smileys/57.gif" alt="" />', $str);
		$str = preg_replace('/:-q/', '<img src="/img/smileys/58.gif" alt="" />', $str);
		$str = preg_replace('/:-bd/', '<img src="/img/smileys/59.gif" alt="" />', $str);
		$str = preg_replace('/^\#\(^/', '<img src="/img/smileys/60.gif" alt="" />', $str);
		$str = preg_replace('/:ar!/', '<img src="/img/smileys/61.gif" alt="" />', $str);
	}

Jag förmodar att det saknas en echo $str; alternativt return $str; i funktionen?
Hur som helst så har du ju inte placerat

$str = preg_replace('/>:D</', '<img src="/img/smileys/6.gif" alt="" />', $str);

före

$str = preg_replace('/:D/', '<img src="/img/smileys/4.gif" alt="" />', $str);

?

SteamMedlem sedan juli 2003169 inlägg
#11

Jo det har jag egentligen. Det är bara att jag har klippt ut den funktionen ifrån backup-filen och inte den nya som jag laborerar med. Kör den funtionen lokalt på din dator och se resultat så får du se.

GeinMedlem sedan sep. 20005 700 inlägg
#12

Ah, nu vet jag. Det är $str = stripslashes( html_entity_decode( $output, ENT_COMPAT, 'UTF-8' ) ); som spökar till det. Den översätter < och > till html-kod för samma tecken. Kör den raden sist.

SteamMedlem sedan juli 2003169 inlägg
#13

Det misstänkte jag också och flyttade den ned ett tag men det hjälpte inte. Eh, jag skippar det här och använder bbcode funktionalitet för detta typ [smile] [hug] osv...Orkar inte leta längre.

Tack för all hjälp dock.

140 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)