IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérification objet youtube par expression régulière [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut Vérification objet youtube par expression régulière
    Bonjour dans le cadre de mon projet,
    je dois vérifier si un lien posté par l'internaute est un lien youtube.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>
    <object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/MNx7dzGbrlY&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/MNx7dzGbrlY&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>
    <object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/OGzLm33LTbg&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OGzLm33LTbg&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>
    Je ne peux pas interdire les balises html et je dois également évité que d'autre script frauduleux sois posté.

    Je me suis donc penché vers l'expression réguliére.
    Quand on regarde bien il y que le carachtérisitque "src" qui change.
    Je développe sous php (Zend framework).

    Je vous remercie de m'aidé dans l'élaboration de cet expression.

  2. #2
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    J'ai fais l'expression réguliére suivante, cela fonctionne mais je voudrais savoir si c'est la bonne méthode?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (eregi('^<object width="320" height="265"><param name="movie" value="(.*)"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="(.*)" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>$', $value) )

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Première remarque : utiliser les fonctions PCRE preg_*. ereg est déprécié.

    Ton motif est pas mal si toutes les dimensions sont fixées, je l'aurais juste aéré avec l'option x

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
     
    $str = '<object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>';
     
    $reg = '#^
    <object \s+ width="320" \s+ height="265">
        <param \s+ name="movie" \s+ value="([^"]*)"></param>
        <param \s+ name="allowFullScreen" \s+ value="true"></param>
        <param \s+ name="allowscriptaccess" \s+ value="always"></param>
        <embed \s+ src="\1" \s+ type="application/x-shockwave-flash" \s+ allowscriptaccess="always" \s+ allowfullscreen="true" \s+ width="320" \s+ height="265"></embed>
    </object>
    $#x';
     
    preg_match($reg, $str, $match);
    print_r($match);
    J'ai ajouté une vérification que la source du param "movie" soit la même que celle de l'objet "embed".

    Mais peut-être cela suffira-t-il :

    <?php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $str = '<object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rzeRn8eaG7Q&hl=fr&fs=1&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>';
     
    $reg = '#^
    <object \s+ width="320" \s+ height="265">
        <param \s+ name="movie" \s+ value="([^"]*)"></param>
    #x';
     
    preg_match($reg, $str, $match);
    print_r($match);

  4. #4
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    re,
    tout d'abord merci de votre réponse.

    J'avais améliorer mon code pour qu'il vérifie si value commence par "http://www.youtube.com" et que la taille sois flexible. Mais quand je réadapte mon code avec le votre, il me valide pas mon objet youtube :s


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    eregi('^<object width="[0-9]*" height="[0-9]*"><param name="movie" value="[^"]*(http://www.youtube.com)[^"]*"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="[^"]*(http://www.youtube.com)[^"]*" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="[0-9]*" height="[0-9]*"></embed></object>$', $value)
    nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $reg = '#^
    		<object \s+ width="[0-9]*" \s+ height="[0-9]*">
    		    <param \s+ name="movie" \s+ value="[^"]*(http://www.youtube.com)[^"]*"></param>
    		    <param \s+ name="allowFullScreen" \s+ value="true"></param>
    		    <param \s+ name="allowscriptaccess" \s+ value="always"></param>
    		    <embed \s+ src="\1" \s+ type="application/x-shockwave-flash" \s+ allowscriptaccess="always" \s+ allowfullscreen="true" \s+ width="[0-9]*" \s+ height="[0-9]*"></embed>
    		</object>
    		$#x';
     
    if (preg_match($reg,$value) )

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ceci sera mieux, vous étiez bloqué par la référence arrière \1 qui ne correspondait pas à la capture n°1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $reg = '#^
    		<object \s+ width="[0-9]*" \s+ height="[0-9]*">
    		    <param \s+ name="movie" \s+ value="((http://www.youtube.com)[^"]*)"></param>
    		    <param \s+ name="allowFullScreen" \s+ value="true"></param>
    		    <param \s+ name="allowscriptaccess" \s+ value="always"></param>
    		    <embed \s+ src="\1" \s+ type="application/x-shockwave-flash" \s+ allowscriptaccess="always" \s+ allowfullscreen="true" \s+ width="[0-9]*" \s+ height="[0-9]*"></embed>
    		</object>
    		$#x';

  6. #6
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    cool ça fonctionne merci
    mais je n'ai pas compris la liaison entre src et value :s

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par tamildark Voir le message
    cool ça fonctionne merci
    mais je n'ai pas compris la liaison entre src et value :s
    De rien

    La référence arrière \1 correspond à ce qui est capturé par la première parenthèse. Il faut donc que l'url dans src soit exactement la même que dans l'attribut value. C'est une sécurité en plus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Vérification objet youtube par expression réguliére
    Par tamildark dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/06/2009, 22h34
  2. [RegEx] Remplacements par expressions régulières
    Par marielaure2805 dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2008, 11h53
  3. Extraction de couleur CSS par expression régulière
    Par frochard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/11/2007, 16h39
  4. [RegEx] Extraction d'une partie d'une URL par expression régulière
    Par Maxbenji dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 22h26
  5. [XSLT] Child par expression régulière
    Par fredraoul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/02/2006, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo