Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Emotikony w komunikatorze
mike89
post 8.01.2015, 13:26:38
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
borabora
post 8.01.2015, 14:18:04
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

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


  1. function emoticons($text) {
  2. $smileys = array(
  3. ':)' => 'img1',
  4. ';)' => 'img2',
  5. ':/' => 'img3'
  6. );
  7.  
  8. foreach($smileys as $key=>$img) {
  9. $text = preg_replace("~\B".preg_quote($key)."\B~", $img, $text);
  10. }
  11. return $text;
  12. }
  13.  
  14. echo emoticons('hgasgh xttp://dsfsd.pl kjjkk:)jhjh kjjkh:) :/ jsdhj :)jhjh :) :)');


Ten post edytował borabora 8.01.2015, 14:19:21
Go to the top of the page
+Quote Post
in5ane
post 8.01.2015, 14:28:14
Post #3





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


http://stackoverflow.com/questions/5701632...n-for-emoticons Tutaj też masz kompletne wyrażenie regularne. To z pierwszego posta (po edycji).


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
mike89
post 10.01.2015, 21:28:07
Post #4





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. 'biggrin.gif' => '<img src="emotikony/big-smile.jpg">',
  7. '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. '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

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

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 08:45