Thread View: pl.comp.lang.php
13 messages
13 total messages
Started by dawidparys
Mon, 27 Aug 2001 10:07
Zamiana z ereg_replace
Author: dawidparys
Date: Mon, 27 Aug 2001 10:07
Date: Mon, 27 Aug 2001 10:07
15 lines
1219 bytes
1219 bytes
Witam!
Chcę zamienić znak '+' na '%2b' poprzez ereg_replace, ale po zwykłym wywołaniu
czyli:
$tekst = ereg_replace("+","%2b",$tekst);
otrzymuję komunikat:
Warning: REG_BADRPT: in ... on line 41
gdzie linia 41 to podana wyżej zamiana.
Pytanie brzmi: co robię źle i jak można to wykonać?
pozdrawiam Dawid Parys
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Zamiana z ereg_replace
Author: Filipus
Date: Mon, 27 Aug 2001 10:35
Date: Mon, 27 Aug 2001 10:35
21 lines
1464 bytes
1464 bytes
Cześć
> Chcę zamienić znak '+' na '%2b' poprzez ereg_replace,
> ale po zwykłym wywołaniu czyli:
> $tekst = ereg_replace("+","%2b",$tekst);
>
> otrzymuję komunikat:
> Warning: REG_BADRPT: in ... on line 41
ereg_replace operuje na wyrażeniach regularnych.
+ ma w w nich specjalne znaczenie, podobnie jak .()[]|*^$
żeby użyć go (i innych znaków specjalnych) jako normalnego znaku,
który ma się pojawić w tekscie, poprzedź go backslash'em:
$tekst = ereg_replace("\+","%2b",$tekst);
[polecam gdzieś poczytać więcej o wyrażeniach regularnych,
nie są zbyt trudne, a mają duuuże możliwości].
pozdrawiam
Filipus
Re: Zamiana z ereg_replace
Author: Filipus
Date: Mon, 27 Aug 2001 10:40
Date: Mon, 27 Aug 2001 10:40
25 lines
1629 bytes
1629 bytes
Jako że piszę pierwszy raz na grupę, witam wszystkich.! :)
Cześć
> Chcę zamienić znak '+' na '%2b' poprzez ereg_replace,
> ale po zwykłym wywołaniu czyli:
> $tekst = ereg_replace("+","%2b",$tekst);
>
> otrzymuję komunikat:
> Warning: REG_BADRPT: in ... on line 41
ereg_replace operuje na wyrażeniach regularnych.
+ ma w w nich specjalne znaczenie, podobnie jak .()[]|*^$
żeby użyć go (i innych znaków specjalnych) jako normalnego znaku,
który ma się pojawić w tekscie, poprzedź go backslash'em:
$tekst = ereg_replace("\+","%2b",$tekst);
[polecam gdzieś poczytać więcej o wyrażeniach regularnych,
nie są zbyt trudne, a mają duuuże możliwości].
pozdrawiam
Filipus
[sorry za cancel. zapomniałem, że skrobię tu pierwszy raz. ;) ]
Re: Zamiana z ereg_replace
Author: Piotr Kęplicz
Date: Mon, 27 Aug 2001 10:49
Date: Mon, 27 Aug 2001 10:49
13 lines
1423 bytes
1423 bytes
Filipus <filipus@nospam.rpg.pl>:
: $tekst = ereg_replace("\+","%2b",$tekst);
:
: [polecam gdzieś poczytać więcej o wyrażeniach regularnych,
: nie są zbyt trudne, a mają duuuże możliwości].
Przy okazji, kiedy nie operuje sie na wyrazeniach regularnych to
lepiej skorzystac z str_replace.
-- ||
||)) ||<< ==> Nowy Polski Słownik Pijacki ==> http://pijacki.ez.pl/
||
,,Myśl lokalnie, działaj globalnie.''
Re: Zamiana z ereg_replace
Author: Gr0g
Date: Mon, 27 Aug 2001 11:06
Date: Mon, 27 Aug 2001 11:06
8 lines
1440 bytes
1440 bytes
> [polecam gdzieś poczytać więcej o wyrażeniach regularnych, > nie są zbyt trudne, a mają duuuże możliwości]. przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo w opisach znalazlem tylko negacje znakow w tablicy ([^...]) a ja kce np. znalesc ciagi nie zaczynajace sie od "http". krzysiek
Re: Zamiana z ereg_replace
Author: slawek-
Date: Mon, 27 Aug 2001 12:19
Date: Mon, 27 Aug 2001 12:19
9 lines
1099 bytes
1099 bytes
"Gr0g" <krzysiek@gr0g.prv.pl> napisał > przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo w opisach > znalazlem tylko negacje znakow w tablicy ([^...]) a ja kce np. znalesc ciagi > nie zaczynajace sie od "http". np. !ereg.... slawek-
Re: Zamiana z ereg_replace
Author: Filipus
Date: Mon, 27 Aug 2001 12:21
Date: Mon, 27 Aug 2001 12:21
29 lines
1915 bytes
1915 bytes
slawek- wrote:
>
> "Gr0g" <krzysiek@gr0g.prv.pl> napisał
> >
> > przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo
> > w opisach znalazlem tylko negacje znakow w tablicy ([^...]) a ja
> > kce np. znalesc ciagi nie zaczynajace sie od "http".
>
> np. !ereg....
Obawiam się, że Twojemu przedmówcy nie dokładnie o to chodziło.
Jestem wręcz pewien, że potrafi zaprzeczać warunki.
___________________________________
AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć
(wcześniej czy później) nazwę hosta lub ścieżkę),
to możesz to zrobić np tak:
ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
if ($znalezione[1] == 'http') {
print("Protokół : ". $znalezione[1] ."<br>\n");
print("Host : ". $znalezione[2] ."<br>\n");
print("Ścieżka : ". $znalezione[3] ."<br>\n");
}
pozdrawiam
Filipus
Re: Zamiana z ereg_replace
Author: Gr0g
Date: Mon, 27 Aug 2001 12:37
Date: Mon, 27 Aug 2001 12:37
25 lines
2237 bytes
2237 bytes
> AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
> Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
> Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć
> (wcześniej czy później) nazwę hosta lub ścieżkę),
> to możesz to zrobić np tak:
>
> ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
> if ($znalezione[1] == 'http') {
> print("Protokół : ". $znalezione[1] ."<br>\n");
> print("Host : ". $znalezione[2] ."<br>\n");
> print("Ścieżka : ". $znalezione[3] ."<br>\n");
> }
Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym pliku.
jezeli mam plik html w ktorym sa odnosniki np:
<a href="strona.html">strona</a>
to zamieniam taki link dodajac na poczatek:
<a href="baza/numer_artykulu/strona.html">strona</a>
no ale do tego musze rozrozniac lokalne linki.
ewentualnie jezeli ma ktos jakis inny pomysl jak takie cos obsluzyc (chodzi
mi o baze artykulow) nie wliczajac uzycia ramek.
pozdrowienia
krzysiek.
Re: Zamiana z ereg_replace
Author: Filipus
Date: Mon, 27 Aug 2001 14:16
Date: Mon, 27 Aug 2001 14:16
24 lines
1972 bytes
1972 bytes
Cześć Gr0g wrote: > Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym > pliku. jezeli mam plik html w ktorym sa odnosniki np: > <a href="strona.html">strona</a> > to zamieniam taki link dodajac na poczatek: > <a href="baza/numer_artykulu/strona.html">strona</a> > no ale do tego musze rozrozniac lokalne linki. Obawiam się, że niebardzo wiem o co Ci dokładnie chodzi. :( Przecież jak sam tworzysz linki, to odróżnisz które są lokalne a które nie. A jeżeli musisz to jakoś sprawdzać, to porównuj nazwę hosta zwracaną przez to wyrażenie, z zawartością zmiennych: $HTTP_SERVER_VARS['HTTP_HOST'] i $HTTP_SERVER_VARS['LOCAL_ADDR'] Tak btw: jeżeli ktoś ma ochotę, to spod adresu http://oak.rpg.pl/~filipus/php.txt może sobie ściągnąć funkcję do wyświetlania zawartości tablic (indeksowanych zwykle i asocjacyjnych, zagnieżdżonych itd). Mam nadzieję, że się przyda... pozdrawiam Filipus
Re: Zamiana z ereg_replace
Author: rafal wiosna
Date: Mon, 27 Aug 2001 17:38
Date: Mon, 27 Aug 2001 17:38
12 lines
1573 bytes
1573 bytes
* Gr0g <krzysiek@gr0g.prv.pl> wrote: > Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym pliku. > jezeli mam plik html w ktorym sa odnosniki np: > <a href="strona.html">strona</a> Nie prościej dodać <BASE href="..."> zaraz po <HEAD>? -- __________________________________________________________________________ rafal wiosna * Polbox On-Line Service Sp. z o.o. * TDCIP * In ARP we trust RAFD-RIPE * PGP nyckeln finns tillgänglig pĺ www.se.pgp.net (ID: 3CDCB7A9)
Re: Zamiana z ereg_replace
Author: Andrzej Kaczmarek
Date: Mon, 27 Aug 2001 17:44
Date: Mon, 27 Aug 2001 17:44
34 lines
2081 bytes
2081 bytes
Filipus napisał(a):
> AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
Są. Na przykład:
/Windows (?!95|98|Me)/
dopasuje np 'Windows NT' lub 'Windows 2000', ale nie dopasuje np. 'Windows 95'
Tylko że AFAIR nie można napisać:
/(?!http:\/\/)jakis_tekst/
> Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
> Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć
> (wcześniej czy później) nazwę hosta lub ścieżkę),
> to możesz to zrobić np tak:
>
> ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
> if ($znalezione[1] == 'http') {
> print("Protokół : ". $znalezione[1] ."<br>\n");
> print("Host : ". $znalezione[2] ."<br>\n");
> print("Ścieżka : ". $znalezione[3] ."<br>\n");
> }
A można i bez regexpów:
<?
$url = parse_url($url);
id (strtolower($url[scheme]) != 'http') {
echo 'tralalala';
}
?>
--
pozdrawiam,
Andrzej
Re: Zamiana z ereg_replace
Author: Gr0g
Date: Mon, 27 Aug 2001 21:49
Date: Mon, 27 Aug 2001 21:49
8 lines
1625 bytes
1625 bytes
> Obawiam się, że niebardzo wiem o co Ci dokładnie chodzi. :( > Przecież jak sam tworzysz linki, to odróżnisz które są lokalne > a które nie. zakladajac ze chce udostepnic np jakis manual, wezmy php, to imho nie jest dobrym rozwiazaniem zmieniac kazdy link w kilkuset plikach, chcialbym miec to zalatwione przez skrypt. pozdrowienia.
Re: Zamiana z ereg_replace
Author: Filipus
Date: Tue, 28 Aug 2001 06:21
Date: Tue, 28 Aug 2001 06:21
25 lines
1505 bytes
1505 bytes
Witam
Andrzej Kaczmarek wrote:
> > AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
>
> Są. Na przykład:
> /Windows (?!95|98|Me)/
> dopasuje np 'Windows NT' lub 'Windows 2000', ale nie dopasuje np.
> 'Windows 95'
Duże THX za informację. :)
> A można i bez regexpów:
> <?
> $url = parse_url($url);
> id (strtolower($url[scheme]) != 'http') {
> echo 'tralalala';
> }
> ?>
Również thx.
No tak, nie raz otwierałem otwarte już przez kogoś drzwi...
pozdrawiam
Filipus
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads