url validation

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 28 Οκτ 2013 08:22

Έχω φτιάξει αυτή την function για να κάνει url validation:

Κώδικας: Επιλογή όλων

function checkwww($www)
 { $crcwww=true;  
      
            $homepage = filter_var($www, FILTER_SANITIZE_URL);
            $pos = strpos($homepage ,'http://');
            if ($pos === false) { 
       
             $httpadded=preg_replace("/www./", "http://www.", $homepage);
            if (!filter_var($httpadded, FILTER_VALIDATE_URL)) {//αν δεν έχει το http δεν περνάει το test
             $crcwww = false;
                 }
             } 
             else {
                 if (!filter_var($homepage, FILTER_VALIDATE_URL)) {
                     $crcwww = false;
                 }
             }

        return $crcwww; 
      } 
To πρόβλημα είναι οτι διεύθηνση της μορφής http://kkk το περνάει σαν valid...δηλαδή η μεταβλητή $crcwww θα είναι true στο παραπάνω παράδειγμα...αυτό δεν το καταλαβαίνω.
Το validate filter δεν "κοιτάει" για καταλήξεις com κλπ κλπ;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 28 Οκτ 2013 09:52

Η filter_var() αναγνωρίζει urls σύμφωνα με αυτούς τους κανόνες.

Το http://kkk είναι απόλυτα νόμιμο url. Σκέψου http://localhost.

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 28 Οκτ 2013 10:52

geomagas έγραψε:Η filter_var() αναγνωρίζει urls σύμφωνα με αυτούς τους κανόνες.

Το http://kkk είναι απόλυτα νόμιμο url. Σκέψου http://localhost.
μμμμ...δεν μου είχε περάσει από το μυαλό αυτό.

Kαι τι να κάνω λοιπόν...να το αφήσω ως έχει;

Kαι το θέμα είναι ότι δίευθυνση της παραπάνω μορφής δεν θεωρείται valid από το jquery validate plugin-σε αντίθεση δηλαδή με το php validation filter.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 28 Οκτ 2013 10:57

Εξαρτάται. Δική σου φόρμα, δικοί σου κανόνες.
Αν θέλεις (ή απλά δεν σε ενοχλεί) να δέχεσαι τέτοια urls τότε άφησέ το ως έχει.
Αν όμως αυτά τα urls χρησιμοποιούνται σε άλλη διαδικασία, η οποία απαιτεί να έχουν συγκεκριμένη μορφή, τότε ...κάτι πρέπει να κάνεις.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από gvre » 28 Οκτ 2013 23:48

Μερικές προτάσεις
Serghio έγραψε: $homepage = filter_var($www, FILTER_SANITIZE_URL);
Η sanitize_url δε χρειάζεται εδώ. Αν θες να κάνεις sanitize, κάνε το έξω από τη συνάρτηση και πέρνα σε αυτήν το αποτέλεσμα.

Serghio έγραψε:$pos = strpos($homepage ,'http://');
Δεν ξεκινάνε όλα τα urls με http://. Μπορεί πχ κάποιο url να ξεκινάει με https

Serghio έγραψε:$httpadded=preg_replace("/www./", "http://www.", $homepage);
Εδώ δε χρειάζεται regex. Ένα απλό concatenation αρκεί. Επιπλέον, ο χαρακτήρας . έχει ειδική σημασία μέσα σε ένα regex pattern. Δοκίμασε το παρακάτω να δεις τι αποτέλεσμα έχει.

Κώδικας: Επιλογή όλων

echo preg_replace("/www./", "http://www.", 'wwwin.gr');

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 29 Οκτ 2013 09:59

gvre έγραψε:Μερικές προτάσεις
Serghio έγραψε: $homepage = filter_var($www, FILTER_SANITIZE_URL);
Η sanitize_url δε χρειάζεται εδώ. Αν θες να κάνεις sanitize, κάνε το έξω από τη συνάρτηση και πέρνα σε αυτήν το αποτέλεσμα.

Serghio έγραψε:$pos = strpos($homepage ,'http://');
Δεν ξεκινάνε όλα τα urls με http://. Μπορεί πχ κάποιο url να ξεκινάει με https

Serghio έγραψε:$httpadded=preg_replace("/www./", "http://www.", $homepage);
Εδώ δε χρειάζεται regex. Ένα απλό concatenation αρκεί. Επιπλέον, ο χαρακτήρας . έχει ειδική σημασία μέσα σε ένα regex pattern. Δοκίμασε το παρακάτω να δεις τι αποτέλεσμα έχει.

Κώδικας: Επιλογή όλων

echo preg_replace("/www./", "http://www.", 'wwwin.gr');
Οπως το "κόβω" πρέπει να φτιάξω ένα δικό μου regexpression και να μην βασιστώ στο validate filter της PHP.
To ερώτημα όμως είναι πως θα έπρεπε να είναι αυτό το reg_expression.
Eχω βρει πολλά παραδείγματα googlerontas αλλά δεν μπορώ να πω ότι έχω καταλήξει κάπου.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 29 Οκτ 2013 10:16

Το valdation της php είναι πολύ γενικό, και υποστηρίζει την έννοια url όπως ορίζεται στα specs. Αυτό σημαίνει ότι πχ το mailto:foufoutos@domain.tld είναι απόλυτα valid.

Για να φτιάξεις το regex που θέλεις, (αν τελικά είναι σκόπιμο και δεν υπάρχει πιο "ανθρώπινος" τρόπος) θα πρέπει πρώτα να καταλήξεις στους δικούς σου κανόνες: Ποιο υποσύνολο των urls θέλεις να δεχτείς ως έγκυρο και ποιο όχι.

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 29 Οκτ 2013 10:27

geomagas έγραψε:θα πρέπει πρώτα να καταλήξεις στους δικούς σου κανόνες: Ποιο υποσύνολο των urls θέλεις να δεχτείς ως έγκυρο και ποιο όχι.
Εδώ είναι και το πρόβλημα θα έλεγα. Το παραπάνω μόνο η πράξη μπορεί να το δείξει νομίζω.

Εϊναι δύσκολο να το ξέρω από πριν...όταν αρχίζουν να καταφτάνουν τα support emails που θα λένε "το και το", τότα τα πράγματα θα είναι σαφέστερα.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από gvre » 29 Οκτ 2013 10:35

Αφού χρησιμοποιείς το jquery validation μπορείς να πάρεις το pattern του και να το χρησιμοποιήσεις στην php. Έτσι κι αλλίως, δεν έχει νόημα να έχεις άλλο pattern στον client και άλλο στον server.

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 29 Οκτ 2013 13:32

gvre έγραψε:Αφού χρησιμοποιείς το jquery validation μπορείς να πάρεις το pattern του και να το χρησιμοποιήσεις στην php. Έτσι κι αλλίως, δεν έχει νόημα να έχεις άλλο pattern στον client και άλλο στον server.
Aυτό θα κάνω. Όμως τα regular expressions δεν τα πολυ κατέχω...έχω καταλήξει λοιπόν οτι θα χρησιμοποιήσω το preg_match.

Το ερώτημα είναι το εξής:
Η λογική είναι ότι αν το url που δηλώνει ο χρήστης(το subject εν προκειμένω) ταιριάζει με το pattern τότε το url θεωρείται valid; Τα λέω σωστά;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 29 Οκτ 2013 13:41

Ερώτηση (ίσως αφελής): Αφού το κάνεις validate στον client, γιατί το κάνεις και στο server; Δεν είναι πλεονασμός;

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 29 Οκτ 2013 13:42

geomagas έγραψε:Ερώτηση (ίσως αφελής): Αφού το κάνεις validate στον client, γιατί το κάνεις και στο server; Δεν είναι πλεονασμός;
Nαι αλλά το server-side validation πάντα χρειάζεται. Εκτός και αν θες να πεις κάτι άλλο.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 29 Οκτ 2013 13:44

Όχι, σε αυτό ήθελα να καταλήξω. Σίγουρα είναι απαραίτητο στο server, άρα γιατί δεν κρατάς μόνο αυτό;

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

url validation

Δημοσίευση από Serghio » 29 Οκτ 2013 13:46

geomagas έγραψε:Όχι, σε αυτό ήθελα να καταλήξω. Σίγουρα είναι απαραίτητο στο server, άρα γιατί δεν κρατάς μόνο αυτό;
το client γινεται για την ευκολία του χρήστη.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

url validation

Δημοσίευση από geomagas » 29 Οκτ 2013 13:48

Ναι αλλά θα μπορούσε να είναι ένα ajax που να καλεί την αντίστοιχη php διαδικασία και όχι τελείως τοπικό js.

Έτσι θα είναι και πιο DRY.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης