Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Emotikony w komunikatorze
mike89
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 8.01.2015

Ostrzeżenie: (0%)
-----


Witam!
Pracuję nad wykonaniem komunikatora i aktualnie chcę ulepszyć funkcję, którą już mam do zamieniania tekstu (np.':D') na emotikonę.
Oczywiście użyłem str_replace tak jak to już było kilkakrotnie pokazywane w innych tematach na tym forum.
Jednak chciałbym, aby funkcja brała pod uwagę takie przypadki jak .np:

-"costam:D"
-"costam:Dcostam"
-":Dcostam"

czyli miejsca gdzie emotikona w stringu łączy się z tekstem, tam chciałbym, aby nie wykonywała się zamiana.
Zamiana może się wykonywać tylko wtedy gdy po obu stronach emotikony jest albo dowolna ilość spacji (lub innych białych znaków) albo nic.
Wiem, że do tego celu można wykorzystać funkcję preg_match i wyrażenia regularne. Ktoś mógłby pomóc w stworzeniu odpowiednich warunków?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mike89
post
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 8.01.2015

Ostrzeżenie: (0%)
-----


borabora skrypt jest ok, ale zamiana nie działa w ogóle przypadku niektórych emotikon np. ':D', ':P'. Chyba ma to związek z literą alfabetu w emotikonie, ale pewności nie mam. Pozostałe działają ok.

inSane czy chodzi o wyrażenie (?<=\s|\A|\n|\r|\t|\v|\<br \/\>|\<br\>)(:S)(?=\s|\Z|$|\n|\r|\t|\v|\<br \/\>|\<br\>) ? W sumie to nie wiem jak mam tego użyć w warunku

Ktoś ma jakiś pomysł?

Ok udało mi się. Tak więc moja funkcja wygląda następująco:

  1. function replace($text){
  2.  
  3. $a = array(
  4. ':)' => '<img src="emotikony/smiley.jpg">',
  5. ':(' => '<img src="emotikony/frown.jpg">',
  6. '(IMG:style_emoticons/default/biggrin.gif) ' => '<img src="emotikony/big-smile.jpg">',
  7. '(IMG:style_emoticons/default/tongue.gif) ' => '<img src="emotikony/tongue-out.jpg">',
  8. ':*' => '<img src="emotikony/kiss.jpg">',
  9. ';)' => '<img src="emotikony/wink.jpg">',
  10. ':/' => '<img src="emotikony/unsure.jpg">',
  11. '(IMG:style_emoticons/default/ohmy.gif) ' => '<img src="emotikony/surprised.jpg">'
  12. );
  13.  
  14.  
  15.  
  16. foreach ($a as $key => $img) {
  17. if(preg_match('@\s'.preg_quote($key).'\s@', $text)){
  18. $text = str_replace($key, $img, $text);
  19.  
  20. } elseif(preg_match('@\s'.preg_quote($key).'@', $text)){
  21. $text = str_replace($key, $img, $text);
  22.  
  23. } elseif(preg_match('@'.preg_quote($key).'\s@', $text)){
  24. $text = str_replace($key, $img, $text);
  25.  
  26. } elseif(preg_match('@^'.preg_quote($key).'$@', $text)){
  27. $text = str_replace($key, $img, $text);
  28. }
  29. }
  30.  
  31. return $text;
  32.  
  33. }

Teraz spełnia te warunki o których pisałem wyżej

Ten post edytował mike89 9.01.2015, 19:46:27
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 01:28