Avatar billede zac Nybegynder
26. april 2004 - 13:30 Der er 13 kommentarer og
1 løsning

Et check af url ved hjælp af ereg - accepterer ikke kolon

Dette her check af en url:

if ( eregi("^(http://)|(https://)(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url']) ) {...}

burde så vidt jeg kan se være god nok, men giver parse error med henvisning til ':'

Hvorfor?
Avatar billede Slettet bruger
26. april 2004 - 13:35 #1
Kan du ikke udelade dem, så det bare er http|https|www ?

Ang. din fejl, går jeg ud fra : er en beskyttet karakter der måske skal escapes.
Avatar billede Slettet bruger
26. april 2004 - 13:36 #2
Admin skrev en artikel om tagster systemet der også lokaliserer en url, måske kan den være behjælpelig:

http://www.eksperten.dk/artikler/106
Avatar billede zac Nybegynder
26. april 2004 - 13:44 #3
Kolon skulle ikke være beskyttet!?Tak for henvisn., kræver nærmere kig :)
Avatar billede jakoba Nybegynder
26. april 2004 - 13:50 #4
er du sikker på din observation er korrekt, og det ikke er noget andet der går galt?

fx finder jeg dine parenteser ret tvivlsomme:
    ^(http://)|(https://)(www\.)
mener du virkelig:
  enten
    'http://' forrest i linien
  eller også
    'https://' hvorsomhelst efterfulgt af 'www.'

Du må entydigt fortælle hvormeget på begge sider af '|' der hører med i den der eller udregning. Jeg tror du mener:
    ^https?://www\.

mvh JakobA
Avatar billede zac Nybegynder
26. april 2004 - 13:59 #5
Du har ret, paranteserne skal være:
if ( eregi("^((http://)|(https://))(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url']) )

eller som JacobA - næsten - skriver det:
if ( eregi("^https?://(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url']) )
(idet der kan være www eller ikke www)

- men den giver stadig: parse error, unexpected ':'

(det er da rigtigt forstået, at [x] angiver en enkelt plads (også som [a-z], mens (plads) angiver, at der skal stå "plads" - ikke?
Avatar billede roenving Novice
26. april 2004 - 14:10 #6
paranteser er ikke nødvendige i regexps ...

^https?:\/\/(www\.)?[a-zA-Z0-9\.]+\.[a-z]{2,4}$

-- de er kun nødvendige, hvis de skal bruges til at gruppere, som i den ovenstående, hvor www-delen skal være der samlet eller slet ikke ...

-- men jeg satte også escape på slashes, da de skal escapes i javascript hvor jeg kender dem !-)
Avatar billede jakoba Nybegynder
26. april 2004 - 14:18 #7
tegnet ':' er ikke et specialtegn i POSIX regular expressions. Det burde ikke give fejl.

kunne det være du er kommet til at skrive ':' istedet for ';' i linien foran den der if-sætning?
Avatar billede zac Nybegynder
26. april 2004 - 15:38 #8
Kan det betyde noget, at var. kommer fra en index.html (og så ved GET):
<a href="comments.php?url=http://www.xxx.dk">Kommentarer til URL'en "http://www.xxx.dk"</a>
??
Avatar billede zac Nybegynder
26. april 2004 - 15:41 #9
Kogt helt ned giver denne her comments.php parse error m. henvisning til sidste linie:

<?php

if ( !(empty($_REQUEST['url'])) )
{
           
    if ( eregi("^https?://(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url']) )   
    {
    $url = $_REQUEST['url'];
    echo "$url";
    }
   
    if ( ! (eregi("^https?://(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url'])) )
    {
    echo "Something went wrong, no. url send with...;
    exit;
    }
   
}       

?>
Avatar billede zac Nybegynder
26. april 2004 - 16:00 #10
Undskyld, fejl i linien
    echo "Something went wrong, no. url send with...";
---
Så nu kommer der et resultat: Noget galt, ingen url sendt med!
Avatar billede jakoba Nybegynder
26. april 2004 - 16:06 #11
Ah, den er meget bedre for der ER noget galt med dit link.
Du kan ikke bare skrive alle mulige bogstaver og sære tegn ind i en url-parameter

prøv med:

<a href="comments.php?url=<? echo urlencode( "http://www.xxx.dk" ); ?>">Kommentarer til URL'en "http://www.xxx.dk"</a>

se http://dk.php.net/manual/en/function.urlencode.php
serveren særger selv for at 'unencode' den modtagne værdi

mvh JakobA
Avatar billede zac Nybegynder
26. april 2004 - 17:53 #12
Tjo, men foreløbig...

1) <a href="comments.php?url=http://www.xxx.dk">...</a> - virker med $url = $_REQUEST['url']; i comments.php.
Det går først galt, hvis jeg bruger denne her i stedet for:
if ( eregi("^https?://(www\.){0,1}[a-zA-Z0-9\.]+(\.)[a-z]{2,4}$", $_REQUEST['url']) )    {    {
    $url = $_REQUEST['url'];
    }
2) dit forslag med urlencode:
<a href="comments.php?url=<? echo urlencode( "http://www.xxx.dk" ); ?>">Kommentarer til URL'en "http://www.xxx.dk"</a>
fører ikke url'en med over (så vidt jeg kan se).
Den eneste måde, jeg kan få en fuld sti frem på er som urlencode( http://...) (dvs. uden ".." omkring url'en).
Så får jeg http://www.xxx.comments.php?url=<?php%20echo%20urlencode(http://www.zzzz.dk);%20?>.
Hvis jeg bruger urlencode ("...") bliver stien ikke fuldført.
Men heller ikke her får den fat i url'en.
Avatar billede zac Nybegynder
21. oktober 2005 - 00:13 #13
takker jakoba for kommentarerne - gik vist aldrig helt løst det...
svarer nu for at lukke
Avatar billede roenving Novice
21. oktober 2005 - 00:18 #14
Har du overvejet at lukke pænt ved at spørge de brugere, der har brugt tid på dine spørgsmål, vil lægge nogle svar ?-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester