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 :

fonctionnement de preg_replace [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Par défaut fonctionnement de preg_replace
    Bonjour,
    Je n'arrive pas à faire fonctionner correctement preg_replace :
    Merci d'avance pour votre aide.
    Bernard

    1) Contenu de mon fichier en entré :
    640px Diapo.mp4

    2) Mon php de transcription :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    function GetHtml($texte){
    	$in_contenu = array(
            '`\[video\](.+)\[/video\]`isU',
    	); 
    	$out_contenu = array(
            '<video autoplay muted loop playsinline style="width: $1; height: auto;" controls> <source src="$2" type="video/mp4"></video>',
    	); 
    	$texte = preg_replace($in_contenu, $out_contenu, $texte);
    	return $texte;
    }
    3) Mon source php d'appel de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html>
    <head>
    	<meta charset="UTF-8">
    	<title>GenHtml</title>
    	<script src="jquery.js"></script>
    </head>
    <?php
    include 'trans.php';
    $Page_HTML='Sortie.html';
    $Src_BBCODE='Fichier.bbc';
    $contenu = file_get_contents($Src_BBCODE);
    $NewPage=nl2br(GetHtml(htmlentities($contenu,ENT_QUOTES,"UTF-8")));
    file_put_contents($Page_HTML, $NewPage);
    ?>

    4) Le resultat :

    <video autoplay muted loop playsinline style="width: 640px Diapo.mp4; height: auto;" controls> <source src="" type="video/mp4"></video><br />

    5) Ce que je devrais obtenir :

    <video autoplay muted loop playsinline style="width: 640px; height: auto;" controls> <source src="Diapo.mp4" type="video/mp4"></video>

  2. #2
    Invité de passage
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Par défaut
    Bonjour, Dans le contenu du fichier, comportant le style et le nom de la source, c'est bien toujours séparer par un espace. Si oui je ferais :
    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
    16
    17
    $texte = "640px Diapo.mp4"; 
     
    /**
     * getVideo Retourne une balise HTML vidéo en fonction de sa largeur et source données 
     *
     * @param  mixed $texte Le style css (largeur) et la source de la vidéo séparer par un espace. EX: "640px Diapo.mp4" 
     * @return string une balise HTML vidéo 
     */
    function getVideo(string $texte) :string {
        $text = explode(" ", $texte);
        $style = $text[0]; 
        $source = $text[1]; 
        $video = '<video autoplay muted loop playsinline style="width: %s; height: auto;" controls> <source src="%s" type="video/mp4"></video>';
        return sprintf($video, $style, $source);
     
    }
    echo getVideo($texte);

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 625
    Par défaut
    Salut à tous.

    1) Dans ton fichier ".bbc", il faut écrire : "[ video ]640px Diapo.mp4[ /video ]"
    Alors que tu as dans ton fichier actuellement "640px Diapo.mp4" alors que tu cherche "[ video ] ... [ /video ]".

    2) il faut corriger GetHtml().
    Tu n'as qu'une seule capture, et donc $1 contient tout. Il faut créer deux captures :
    $1 : 640
    $2 : Diapo.mp4

    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function GetHtml($texte) {
    $in = array('`\\[video\\](\d+)px\s+(.+)\\[/video\\]`i');
    $out = array('<video autoplay muted loop playsinline style="width: $1px; height: auto;" controls><source src="$2" type="video/mp4"></video>');
    return preg_replace($in, $out, $texte);
    }
    3) Corrige en mettant cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $contenu = file_get_contents($Src_BBCODE);
    $NewPage = nl2br(GetHtml($contenu));
    file_put_contents($Page_HTML, $NewPage);
    4) essaye de tester avec juste le minimum, comme ceci dans ton fichier.bbc : "[ video ]640px Diapo.mp4[ /video ]"
    rien de plus, histoire de voir si ça fonctionne ou pas.
    (j'ai dû mettre des espaces dans la bbcode video sinon cela était interprétée. Il n'en faut pas, bien sûr.)

    5) En sortie, tu dois obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <video autoplay muted loop playsinline style="width: 640px; height: auto;" controls>
    <source src="Diapo.mp4" type="video/mp4">
    </video>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 51
    Par défaut

    Merci Artemus24 !

    Super, çà fonctionne parfaitement ! 2 Jours que je tournai en rond sur ce problème !

    Bernard

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

Discussions similaires

  1. [RegEx] preg_replace fonctionne a moitié
    Par bygleader dans le forum Langage
    Réponses: 1
    Dernier message: 10/03/2018, 17h10
  2. Réponses: 1
    Dernier message: 02/08/2016, 23h47
  3. [RegEx] Fonctionnement de preg_replace
    Par PseT34 dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2008, 11h29
  4. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 11h56
  5. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10

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