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 :

Changer dimensions d'un objet [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Par défaut Changer dimensions d'un objet
    Bonjour,
    j'ai une chaine de caractère comme suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <object width="560" height="340">
    	<param name="movie" value="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&"></param>
    	<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
    	<embed src="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed>
    </object>
    j'utilise ma fonction replace de cette facon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $youtube='<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>';
    $pattern = '(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)';
     
    $pattern = '(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)';
     
     
    $replacement = '$1' . '125'. '$3'.'250'.'$5'.'125'.'$7'.'250'.'$9';
     
    echo preg_replace($pattern, $replacement, $youtube);
    Mais j'ai un message d'erreur de firefox :'(


    Warning: preg_replace() [function.preg-replace]: Unknown modifier '(' in C:\wamp\www\test\preg.php on line 9

    J'ai essayé de modifier ma variable pattern
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '/(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)/';
    ms ceci ne fonctionne toujours pas :s

    Merci de m'aider

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

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Par défaut
    je suis passé par eregi_replace et cela fonctionne :d


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $youtube='<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>';
    $pattern = '(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)';
     
    $replacement = '\\1' . '125'. '\\3'.'250'.'\\5'.'125'.'\\7'.'250'.'\\9';
     
    $youtube=  eregi_replace($pattern, $replacement, $youtube);
    			echo $youtube;


  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    Août 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2009
    Messages : 1
    Par défaut il faut un délimiteur au pattern
    bonjour
    initialise le pattern avec : $pattern = "/pattern/". Ca ira tout de suite mieux.

    fx

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Non, un autre délimiteur plutôt (#, @, `, etc), sinon il faut échapper le / qui apparaît dans la balise fermante de </object> pour ne pas qu'il soit considéré comme délimiteur justement.

    Par ailleurs, il faudrait préférer preg_replace à ereg(i)_replace puisque cette dernière est (officiellement maintenant) dépréciée.

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

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Par défaut
    merci de vos réponses les gars,
    j'ai pas compris l'histoire de pattern :s
    Mais effectivement je suis passé a eregi_replace (deuxième post) et mon expression régulière fonctionne !!
    Mais après je ne sais pas si c'est le meilleur moyen. Si je comprends bien pour l'améliorer je dois faire quelque chose comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $youtube='<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/q4xDFw5WQlk&hl=fr&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>';
     
     
    $pattern = '#(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)#';
     
    $replacement = '\\1' . '125'. '\\3'.'250'.'\\5'.'125'.'\\7'.'250'.'\\9';
     
    $youtube=  eregi_replace($pattern, $replacement, $youtube);
    			echo $youtube;

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Ma remarque était en rapport avec l'utilisation que vous avez tenté de faire de la fonction preg_replace. En effet, les fonctions POSIX (ereg*) ne nécessite pas de délimiteurs au niveau du masque puisqu'elles ne proposent pas d'options comme le font les fonctions PCRE (preg_*).

    Donc pour eregi_replace, nous sommes d'accord, il n'est pas nécessaire d'y ajouter de délimiteur en début et fin d'expression. Mais avec preg_replace, ils sont nécessaires mais doivent être bien choisis pour ne pas qu'ils figurent dans le motif ou alors il faut les échapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $replacement = '\\1' . '125'. '\\3'.'250'.'\\5'.'125'.'\\7'.'250'.'\\9';
    
    # Correct mais déprécié :
    $pattern = '(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)';
    $youtube=  eregi_replace($pattern, $replacement, $youtube);
    
    # Utilisation correcte du séparateur / :
    $pattern = '/(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+<\/object>)/i';
    $youtube=  preg_replace($pattern, $replacement, $youtube);
    
    # Utilisation d'un séparateur plus adapté :
    $pattern = '#(<object[^>]width=")([0-9]+)(" height=")([0-9]+)(".+width=")([0-9]+)(" height=")([0-9]+)(".+</object>)#i';
    $youtube=  preg_replace($pattern, $replacement, $youtube);

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

Discussions similaires

  1. Dimension d'un objet
    Par mariolecuyer dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/03/2009, 21h36
  2. [VBA-Excel] Verouiller les dimensions d'un objet zone de texte
    Par oktopuces dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2006, 13h42
  3. [Debutant][AWT] Dimension d'un objet List
    Par romu92 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 10/05/2006, 11h12
  4. [Java 3D] Changer l'apparance d'objets WaveFront
    Par otarie10 dans le forum 3D
    Réponses: 1
    Dernier message: 10/04/2006, 11h20
  5. Réponses: 5
    Dernier message: 10/04/2006, 10h15

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