Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyrażenia regularne (tworzenie odnośników)
wujek2009
post 12.08.2012, 10:14:42
Post #1





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

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


Hej,

mam wyrażenie regularne, które prezentuje się następująco:
  1. $content = preg_replace("#(^|[\n ])([\w]+?://\S[\w\#()$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" rel=\"nofollow\" target=\"_blank\" class=\"postlink\">\\2</a>", $content);


w tej chwili działa na zasadzie, że jeśli w tekście jest coś co może być linkiem (np. www.forum.php.pl, www.wp.pl/czytaj_newsy,15512.html) to zamieni na anchor (aby link był klikalny).

jednak automatycznie tutaj dodaje parametr nofollow - co jest bardzo dobrym rozwiązaniem, ale po co ma dodawać
nofollow do linków z mojego serwisu? Więc zastanawiam się jak zrobić coś w stylu, że jeśli wydobyty link pasuje do linku mojego serwisu to nie dodawaj wówczas nofollow.

Tylko jak takie coś zrealizować? W tej chwili sunie mi się jedno rozwiązanie:
preg_match_all - i wydobywanie wszystkich tekstów, które mogą być linkiem i porównanie ich w pętli foreach
- tylko po co mam katować 30 wywołań pętli foreach (30 - ponieważ jest to funkcja filtrująca wiadomości i 30 postów wchodzi na stronę) jak prawdopodobnie da się to załatwić w modyfikacji powyższego wyrażenia regularnego - tylko jak?

Pomysły?
Go to the top of the page
+Quote Post
grzes999
post 12.08.2012, 10:32:18
Post #2





Grupa: Zarejestrowani
Postów: 305
Pomógł: 29
Dołączył: 5.07.2011

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


dopisz do wyrażenia jak wygląda link z twojej strony i usuń nofollow a drugie wyrażenie zostaw takie jak jest i pro problemie.
Zależnie od tego co będzie to ci wstawi. Mógł byś też skorzystać z preg_replace_callback i w funkcji sprawdzać iczy jest to twój serwis czy nie. i wtedy odpowiednia akcja.
Go to the top of the page
+Quote Post
wNogachSpisz
post 12.08.2012, 11:23:26
Post #3





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Co jeśli tekst jest w komentarzu?
Co jeśli tekst jest wewnątrz elementu <textarea>?
Co jeśli tekst jest wewnątrz elementu <script>?
Co jeśli tekst jest wewnątrz elementu anchor?
Co jeśli tekst jest w atrybucie (np. value)?

Musisz sparsować HTML, poszukać elementów textNode i tylko w nich szukać domen...

http://stackoverflow.com/questions/3577641...s-html-with-php

Ten post edytował wNogachSpisz 12.08.2012, 11:31:22
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: 17.06.2025 - 00:21