Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [RegExp] Alternatywny wybór
Forum PHP.pl > Forum > PHP
Spirit86
Witam.
Wstyd się przyznać, że znów męczę Was o te wyrażenia regularne dry.gif .
Żeby nie zabierać Wam cennego czasu, przejdę od razu do rzeczy.

Chcę osiągnąć taki efekt:
Łańcuch typu
Kod
[url=jakis_string]jakis_opis[/url]
zamienić na
  • Adres typu:
    1. <a href="jakis_string" target="_blank">jakis_opis</a>
    jeżeli jakis_string zawiera przedrostek http|https|ftp|www(przy www trzeba by dodać http:// przed stringiem)
  • Adres typu:
    1. <a href="jakis_string">jakis_opis</a>
    jeżeli jakis_string nie zawiera przedrosteku http|https|ftp|www
Napisałem wyrażenie ogólne na zamiane
Kod
[url=jakis_string]jakis_opis[/url]
:

  1. <?php
  2.  preg_replace("#+?://){1}([a-z0-9-.,?!%*_#:;~&$@/=+()]+)](.*?)#si", "<a class="focus" href="12" target="_blank">3</a>", ...
  3.  
  4. ?>
Ociu
Najprościej: "#\[url=(.*?)?(.*?)\](.*?)\[/url\]#si", "<A HREF=\"\\2\" TARGET=\"_blank\">\\3</A>"
Spirit86
Cytat(Ociu @ 2005-11-03 20:54:30)
Najprościej: "#\[url=(.*?)?(.*?)\](.*?)\[/url\]#si", "<A HREF=\"\\2\" TARGET=\"_blank\">\\3</A>"

ale najmniej bezpiecznie no i nie rozróżnia adresów lokalnych serwera(galeria.html) od adresów zewnętrznych (http://onet.plgaleria.html)
NuLL
Samej regularki nie napisze bo sie ich ucze ale najlatwiej bedzie dodac modyfikator e i wtedy wepchnac do wyrazenia prostego substr()=="" smile.gif
bela
Target=blank? To przecież herezja w dobie standardów.
  1. <?php
  2. preg_replace(array('/)](.*)/', '/)](.*)/'), array('tu jedno', 'tu drugie'), $string);
  3. ?>


Coś takiego?
Spirit86
Cytat(bela_666 @ 2005-11-04 17:23:08)
Target=blank? To przecież herezja w dobie standardów.

Nie za bardzo rozumiem o co Ci chodzi z jakim standartem to nie jest zgodne? XHTML ?

Niestety Twoje wyrażenie nie działa.
Kod
[url=katalog/index.php]katalog lokalny[/url]

nie zostaje zamieniony sad.gif
FiDO
Cytat
Nie za bardzo rozumiem o co Ci chodzi z jakim standartem to nie jest zgodne? XHTML ?

Wlasnie z XHTML.

A jesli koniecznie chcesz to zrobic, to musisz sie pobawic z flaga e przy wyrazeniu albo zastosowac takie podejscie jak podal bela_666, czyli osobne wyrazenia do wersji z przedrostkiem i bez.
bela
Cytat(Spirit86 @ 2005-11-04 20:48:45)
Niestety Twoje wyrażenie nie działa.
Kod
[url=katalog/index.php]katalog lokalny[/url]

nie zostaje zamieniony sad.gif

Trzeba dopisać tam sobie / do [a-z, etc] ;]
Spirit86
Cytat(FiDO @ 2005-11-04 20:13:36)
Cytat
Nie za bardzo rozumiem o co Ci chodzi z jakim standartem to nie jest zgodne? XHTML ?

Wlasnie z XHTML.

ej no to ja czegoś nie rozumiem. Mianowicie jak masz stronę z newsami i tam dajesz odnośniki do stron zagranicznych i chciałbyś, aby otwierały się w nowym oknie, to jak chcesz to napisać zgodnie z XHTML.

Swoją drogą to nie znałem żadnej regułki, że w XHTML nie można używać targeta....
Znacznik ten jest opisany argumentem, tj. target="_blank" w przeciwieństwie do selected , który trzeba opisywać selected="selected"
bela
Hmm, po pierwsze validator. Po drugie google.

A tak w ogóle to powiedz mi, czemu zmuszasz mnie do otwierania w nowym oknie? Ja nie lubię mieć bałaganu, więc i tak otwieram w nowej zakładce, no ale jeśli chce opuścić stronę to nie mogę zrobić tego bezpośrednio przez link, tylko tab i zamnkąć poprzedni tab... ;]
-SaraniS-
Cytat(bela_666 @ 2005-11-05 11:24:15)
A tak w ogóle to powiedz mi, czemu zmuszasz mnie do otwierania w nowym oknie?

Hmm... Bo mu za to placa?.. winksmiley.jpg Sam nie takie herezje wyczynialem dla pieniedzy sadsmiley02.gif
Dlatego, poki co, wole jednak pisac w HTML-u, ktory dopuszcza uzywanie target="_blank" cool.gif
Jest tylko jedna granica, ktorej nie przekrocze: tworzenie "osiolkowatych" stron pod IE aaevil.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.