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 confirmé
    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
    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 confirmé
    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
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    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 confirmé
    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
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    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 confirmé
    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
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    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