Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP - preg_replace - emotikony
Michael2318
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Witam.

Posiadam w jednej tablicy skupione kody emotikonek oraz adres url prowadzący do nich. Dane mam zgromadzone w ten sposób:

  1. $smilies = array(
  2. array(':)', 'http://strona.pl/obraz.png'),
  3. array(';)', 'http://strona.pl/obraz2.png'),
  4. ...
  5. );


I tutaj podmiana kodów na adresy URL prowadzace do ikonek:

  1. foreach($smilies as $emoticon)
  2. {
  3. $quoted_emoticon = preg_quote($emoticon[1],"#");
  4. $match = '#(?!<\w)(' . $quoted_emoticon .')(?!\w)#';
  5. $message = preg_replace($match,'<img src="'.$emoticon[0].'">',$message);
  6. }


Problem mam jednak taki z tym wyrażeniem regularnym, że podmienia mi wszystko jak leci, nawet w adresy url wstawiane mam ikonki, np.: "http://onet.pl/". Skrypt w pogrubionym fragmencie wstawia mi ikonę.
Co bym chciał zmienić - chciałbym żeby skrypt wstawiał mi obrazki z emotikonami tylko wtedy, gdy kod tej emotikonki jest oddzielony z obu stron spacjami, przykład:

Cytat
Tutaj wyświetli :--) emotikonę.


lub w przypadku, gdy jest to koniec bądź też początek tekstu, przykład:

Cytat
:--) Tutaj wyświetli emotikonę (emotikona jest na początku tekstu, więc nie ma potrzeby dodawania spacji od lewej strony).


Cytat
Tutaj wyświetli emotikonę (emotikona jest na końcu tekstu, więc nie ma potrzeby dodawania spacji od prawej strony) :--)


W pozostałych przypadkach chciałbym, aby emotikona nie była wyświetlana/zamieniana. Czy ktoś byłby w stanie mi pomóc z tym wyrażeniem regularnym, tak aby spełniło ono moje oczekiwania? Sam nie potrafię sobie z tym poradzić.

Dzięki.

Ten post edytował Michael2318 21.02.2016, 00:31:28
Go to the top of the page
+Quote Post
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


  1. $content = str_replace(array_keys($emoticons), array_values($emoticons), $content);

Powyższe nie musi (i nie powinno) być w pętli.

Ten post edytował lukaskolista 21.02.2016, 10:19:24
Go to the top of the page
+Quote Post
Michael2318
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


W porządku tylko to nadal nie rozwiązuje mojego problemu. Sama zamiana na sztywno kodów na odpowiednik obrazków to nie problem. Problemem dla mnie jest zamiana tych grafik tylko wtedy, kiedy obok kodów są spacje (min, jedna spacja z lewej i jedna z prawej strony kodu) lub wtedy kiedy kod emotikony jest na początku lub na końcu stringa - wtedy będzie tylko jedna spacja:
- jeśli kod emotikony jest na początku stringa to spacja będzie tylko z prawej strony kodu,
- jeśli kod emotikony jest na końcu stringa to spacja będzie tylko z lewej strony kodu.

Jak do tego podejść?

EDIT:

Rozwiązanie:

  1. $match = '#(?!<\S)(' . $quoted_emoticon .')(?!\S)#';


Ten post edytował Michael2318 21.02.2016, 12:32:14
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


użyj \b z obu stron

Bo jak dasz (IMG:style_emoticons/default/smile.gif) . To Ci nie zadziała

Ten post edytował Pyton_000 22.02.2016, 09:49:40
Go to the top of the page
+Quote Post

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: 22.12.2025 - 23:34