Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wyrażenia regularne-dziwny błąd
Forum PHP.pl > Forum > Przedszkole
mieetek
Witam. Mam zamiar stworzyć funkcję, która przy odpowiednich warunkach (przy odpowiednich uprawnieniach...,a właściwie ich braku) będzie zamieniała linki na zwykły tekst. Sama funkcja problemem nie jest, jednak problemem zawsze były dla mnie wyrażenia regularne. Udało mi się wymyślić coś takiego:
  1. <?php
  2. $conv = preg_replace("#<a href="(.*)">(.*)</a>#si", "2", $conv);
  3. ?>
- póki co nie zaimplementowałem tego do funkcji sprawdzającej uprawnienia (jeszcez jej nie napisałem)- tylko podpiąłem do BBcode. Testowy plik wygląda tak:
  1. <?php
  2. echo ('<a href="asd.htm">link html</a>');
  3. echo ('<br /><a href="?site=asd">bez dodatkow</a>');
  4. echo ('<br /><a href="?site=asd&id=ble">z id</a>');
  5. echo ('[br] 22a');
  6. ?>

I wyświetla się...
  1. z id
  2. a

krótko mówiąc owszem, zamienia to wyrażenie lnk na tekst, ale tylko jeden- ostatni link. Wydaje mi się, że jest to wina tego wyrażenia, jeśli tak, to co jest w nim źle?
piotrekkr
a nie lepiej uzyc htmlspecialchars() (ta funkcja akurat zamieni znaki specialne html na odpowiednie encje czyli beda wyswietlone je jako zwykly tekst w przegladarce) albo striptags() zeby dla nich nie wyswietlac tagow html w trym tez linkow. Poza tym wyrazenia regularne sa zachlanne wiec zapamietaja ci wszystko co jest pomiedzy <a href="" > a </a> czyli jesli masz np :

Kod
<a href="www.onet.pl">onet</a><a href="www.wp.pl"> wp</a>


to wynikiem bedzie
Kod
wp


mozna by sam wrzozec zapisac tak:

Kod
#<a href="([^>]*)"( *)>([^<]*)</a>#si


czyli
  1. <?php
  2. $conv='<a href="www.onet.pl">onet</a><a href="www.wp.pl"> wp</a>';
  3. $conv=preg_replace('#<a href="([^>]*)"( *)>([^<]*)</a>#si','3',$conv);
  4. echo $conv;
  5. //wynik: onet wp
  6. ?>
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.