webForumDet fria alternativet

Samma smilie två gånger i rad

PHP

11 svar · 578 visningar · startad av silfver

Medlem sedan apr. 200312 679 inlägg
Frågan#1

Jag har problem med smilies som inte ersätts med en bild. Titta på den här sidan så kanske du förstår vad jag menar. Skriver man samma smilie två gånger på rad så visas bara ena - konstigt nog? Så här ser min php-kod ut:

if (!isset($wpsmiliestrans)) {
	$wpsmiliestrans = array(
	' :)'	=> 'smile.gif',
	' :('	=> 'frown.gif',
	' :r'	=> 'shame.gif',
	' :e'	=> 'supergrin.gif',
	' ;)'	=> 'wink.gif',
	' :P'	=> 'tongue.gif',
	' :p'	=> 'tongue.gif',
	' :h'	=> 'cool.gif',
	' :OO'	=> 'look.gif',
	' :oo'	=> 'look.gif',
	' x('	=> 'angry.gif',
	' :o'	=> 'redface.gif',
	' :O'	=> 'redface.gif',
	' :q'	=> 'quest.gif',
	' :birp'	=> 'beergrin.gif',
	' :D'	=> 'supergrin.gif',
	' :bire'	=> 'bire.gif',
	' :x'	=> 'dead.gif',
	' :dev'	=> 'devel.gif',
	' :dev2'	=> 'devilgrin.gif',
	' :f'	=> 'flirt.gif',
	' :l'	=> 'hrmpf.gif',
	' :i'	=> 'idea.gif',
	' :stud'	=> 'stud.gif',
	' :moose'	=> 'moose.gif',
	' :L'	=> 'laugh.gif',
	' :bla'	=> 'jaja.gif',
	' (y)'	=> 'yes.gif',
	' (n)'	=> 'no.gif',
	);
}
// generates smilies' search & replace arrays
foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
	$wp_smiliessearch[] = '/(\s|^)'.preg_quote($smiley, '/').'(\s|$)/';
	$smiley_masked = htmlspecialchars(trim($smiley), ENT_QUOTES);
	$wp_smiliesreplace[] = " <img src='" . get_option('siteurl') . "/wp-includes/images/smilies2/$img' alt='$smiley_masked' class='wp-smiley' /> ";
}

Vad är det som är fel? Tar jag bort mellanrummen så att det blir ':)' osv. så fungerar det inte alls.

Tack wF för gubbarna. ;)

Medlem sedan apr. 200312 679 inlägg
#2

Ingen? Kom igen, jag vet ju att wF är fullt av php-gurus. :)

Medlem sedan aug. 20068 090 inlägg
#3

Jag är absolut ingen php-guru. Ingen guru alls förresten. Men vad händer om du tar space både före och efter:

' :) '

EDIT; HAHAHA....det syns ingen kod, för det bidde en riktig smiley. :)
Men du hajar ändå va?

Medlem sedan apr. 200312 679 inlägg
#4

Danne V skrev:

Jag är absolut ingen php-guru. Ingen guru alls förresten. Men vad händer om du tar space både före och efter:

' :) '

EDIT; HAHAHA....det syns ingen kod, för det bidde en riktig smiley. :)
Men du hajar ändå va?

Ska pröva! :) Värt ett försök i alla fall... Men då krävs det att det är ett mellanslag efter alla smilies, vilket inte borde behövas...

Man kan klicka i "Stäng av smilies i texten"...

r\ Nej, men strunt samma. Så vill jag ju inte ha det. Jag vill att det ska vara ett mellanslag innan, inget efter...

Fler förslag?

Medlem sedan aug. 20068 090 inlägg
#5

silfver skrev:

Men då krävs det att det är ett mellanslag efter alla smilies, vilket inte borde behövas..

.
Njaeee...eftersom du har ett mellanslag i början i koden där smileyn "defineras", så måste det ju vara ett mellanslag även när folk ska lägga in smileyn i det dom skriver, eller hur? Typ... kanske......

silfver skrev:

Man kan klicka i "Stäng av smilies i texten"...

Doh!

Medlem sedan aug. 20068 090 inlägg
#6

Varför funkar det inte om du tar bort mellanslagen helt? Jag menar: Ett mellanslag är ju som vilket tecken som helst egentligen. Skriver du att det ska bli en gubbe om nån skriver "ABC", så blir det väl det? Om du nu inte skriver "fel" när du testar och "glömmer" eller lägger till ett mellanslag?

Förresten... jag är nog för trött för det här. Men jag lovar att jag med stort intresse kommer att kolla in den här tråden direkt imorron bitti för att se om det löst sig. :)

Medlem sedan dec. 19996 721 inlägg
#7

Men du visar inte all kod. Själva ersättningen är inte med... (anar förvisso hur den ser ut)

Själva sökmönstret gör dock att man inte kan skriva :):), men väl :) :)

Ta bort mellanslagen i strängarna och byt till

$wp_smiliessearch[] = '/'.preg_quote($smiley, '/').'/';
Medlem sedan apr. 200312 679 inlägg
#8

emission skrev:

Men du visar inte all kod. Själva ersättningen är inte med...

Oj, inte? Jag visade all kod som var relevant i filen... ska kolla de andra.

Sen märkte jag precis en lustig sak. Det visade sig att jag i min fil inte hade några mellanslag, utan där såg det ut så här ':)'. Och ersätter jag min array med den jag postade så syns inte smilies över huvud taget. Kolla sidan igen. Nu är array så som i första inlägget.

Medlem sedan dec. 19996 721 inlägg
#9

Har redigerat mitt föregående inlägg. Prova det som står där.

Medlem sedan apr. 200312 679 inlägg
#10

emission skrev:

Har redigerat mitt föregående inlägg. Prova det som står där.

Det fungerar! Tack! :) Men när jag gör en :OO så blir det en smilie plus följande: O' class='wp-smiley' /> Varför kan inte den smilien se ut så? Så här blir html:

<img src='http://www.silfver.se/wp-includes/images/smilies2/look.gif' alt=' <img src='http://www.silfver.se/wp-includes/images/smilies2/redface.gif' alt=':O' class='wp-smiley' /> O' class='wp-smiley' />
Medlem sedan dec. 19996 721 inlägg
#11

Det beror på alt-texten, som helt plötsligt matchar, eftersom vi inte längre kräver mellanslag (el. annan brytning) kring smileyn.

:OO blir en bild med :OO i alt-texten, som sedan matchas som en :O.

Du skulle kunna prova något i stil med (har inte php:at på mycket länge, så jag kan mycket väl vara ute och cykla)

$wpsmiliestrans = array(
    ':)'    => array('smile.gif','Smile'),
    ':('    => array('frown.gif','Frown'),

och

smilies2/$img[0]' alt='$img[1]' class
Medlem sedan apr. 200312 679 inlägg
#12

Tack för hjälpen emission! Jag bytte ut :OO mot en nolla i stället så slapp jag mer pill i originalkoden. Tack återigen!

291 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)