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 :

Encodage ou décodage d'une chaine


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Encodage ou décodage d'une chaine
    Bonjour,

    J'ai fait ce bout de code pour jouer les morceaux que cet utilitaire liste mais je rencontre un problème :
    • si le fichier s'appelle : 01.test.mp3 pas de souci
    • Si le fichier s'appelle : silence.mp3 pas de souci
    • mais si le fichier s'appelle : 01 - J'aime les gars.mp3 (ICI est le problème avec les espaces, les accents,...)

    Je peux donc ajouter une ligne comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pathfile = str_replace(" ", "%20", $pathfile);
    mais n'y a t'il pas plus simple ? ou plus automatique comme un urlencode mais il me manque quelque chose.

    Merci

    Code html : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <!DOCTYPE html>
     
    <html lang="fr" >
     
    <head>
      <title>Mon Lecteur</title>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
     
    <body>
     
    <script src=https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js></script>
     
    <?php
     
    $GLOBALS["base"] = 0;
    $GLOBALS["repertoire"] = array();
     
    $GLOBALS["fichier"] = array();
    $GLOBALS["i"] = array();
     
    $GLOBALS["nouveau_repertoire"] = array();
    $GLOBALS["j"] = array();
     
    function ajouter_un_repertoire($dossier)
            {
            if (!in_array($dossier, $repertoire)) 
                    {
                    $GLOBALS["repertoire"][$GLOBALS["base"]] = $dossier;
                    $GLOBALS["base"]++;
                    }
            }
     
    function afficher_un_repertoire($numero)
            {
            echo $repertoire[$numero];
            }
     
    function renvoie_le_numero_du_repertoire($dossier)
            {
            for ($i=0;$i<sizeof($GLOBALS["repertoire"]);$i++)
                    {
                    if ($GLOBALS["repertoire"][$i]==$dossier)
                            {
                            return $i;
                            exit;
                            }
                    }
            }
     
    function lire_un_repertoire($dossier)
            {
            // ajoute le dossier à la base de données
            ajouter_un_repertoire($dossier);
     
            $numero_repertoire = renvoie_le_numero_du_repertoire($dossier);
            $GLOBALS["i"][$numero_repertoire] = 0;
            $GLOBALS["j"][$numero_repertoire] = 0;
     
            echo "<ul>";   
            $folder = opendir ($dossier);
       
            while ($file = readdir ($folder)) 
                    {   
                    if ($file != "." && $file != "..") 
                            {   
                            $pathfile = $dossier.'/'.$file;           
                            if(pathinfo($pathfile, PATHINFO_EXTENSION) == 'mp3')
                                    {  
                                    $GLOBALS["fichier"][$numero_repertoire][$GLOBALS["i"][$numero_repertoire]] = $file;
                                    $GLOBALS["i"][$numero_repertoire]++;
                                    //echo "<li><a href=$pathfile>$file</a></li>";
                                    }           
                            if(filetype($pathfile) == 'dir')
                                    {  
                                    $GLOBALS["nouveau_repertoire"][$numero_repertoire][$GLOBALS["j"][$numero_repertoire]] = $pathfile;
                                    $GLOBALS["j"][$numero_repertoire]++;
                                    //echo "<li><a href=$pathfile>$file</a></li>";
                                    //lire_un_repertoire($pathfile);               
                                    }
                            }       
                    }
            sort($GLOBALS["fichier"][$numero_repertoire]);
            sort($GLOBALS["nouveau_repertoire"][$numero_repertoire]);
            //print_r($GLOBALS["fichier"][$numero_repertoire]);
            //print_r($GLOBALS["nouveau_repertoire"][$numero_repertoire]); 
     
            closedir ($folder);
            for ($boucle1=0;$boucle1<sizeof($GLOBALS["nouveau_repertoire"][$numero_repertoire]);$boucle1++)
                    {
                    echo "<li>".$GLOBALS['nouveau_repertoire'][$numero_repertoire][$boucle1]."</li>";
                    lire_un_repertoire($GLOBALS['nouveau_repertoire'][$numero_repertoire][$boucle1]);
                    }
            for ($boucle2=0;$boucle2<sizeof($GLOBALS["fichier"][$numero_repertoire]);$boucle2++)
                    {
                    $pathfile = $dossier."/".$GLOBALS['fichier'][$numero_repertoire][$boucle2];
                    // [ENCODAGE OU DECODAGE D'UNE CHAINE]
                    echo "<li><a href=javascript:lire('".$pathfile."') >".$GLOBALS['fichier'][$numero_repertoire][$boucle2]."</a></li>";
                    }
            echo "</ul>";   
            }
     
    lire_un_repertoire(".");
     
    //print_r($repertoire);
     
    ?>
     
    <audio id="myaudio" controls autoplay></audio>
    <script>
    var audio = document.getElementById("myaudio");
    audio.volume = "0.4";
     
    function lire(data) {
          var audio = document.getElementById('myaudio');
          audio.src = data;
          audio.load(); 
          audio.play();
    }
     
    </script>
     
    </body>
     
    </html>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    et quel est le problème à part "ça ne fonctionne pas" ?
    affichez le contenu des variables pour voir à quel moment vous n'avez plus le bon nom de fichier.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Quand les données viennent d'une base de données, il faut utiliser la fonction htmlspecialchars($row['nom']) pour l'affichage.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par mathieu Voir le message
    et quel est le problème à part "ça ne fonctionne pas" ?
    affichez le contenu des variables pour voir à quel moment vous n'avez plus le bon nom de fichier.
    en fait cela fonctionne mais je cherche une fonction qui automatise le changement d'une variable.
    Ici pour un fichier appelé 01.test.mp3
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<li><a href=javascript:lire('".$pathfile."') >".$GLOBALS['fichier'][$numero_repertoire][$boucle2]."</a></li>";
    cela envoie bien $pathfile="01.test.mp3"

    mais pour un fichier qui s'appelle 01 - J'aime les gars.mp3 (avec espace et '
    j'aimerai que $pathfile="01%20-%20J%27aime%20les%20gars.mp3"

    je peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pathfile = str_replace(" ", "%20", $pathfile);
    $pathfile = str_replace("'", "%27", $pathfile);
    mais cela va être long pour l'ensemble des caractères spéciaux.

    genre urlencode() mais celui ci met des + à la place des espaces

    merci

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    comme le proposait Dentrite, la fonction htmlspecialchars permet de générer du code html en gérant tous les caractères spéciaux.
    ou alors, ce que je fais souvent dans ce cas est de passer les données du php vers javascript au format json comme cela par exemple :
    Code html : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
     
    $fichiers_mp3 = [];
     
    $directory = new \RecursiveDirectoryIterator(".");
    $iterator = new \RecursiveIteratorIterator($directory);
     
     
    foreach ($iterator as $element) {
            
            if (pathinfo($element->getPathname(), PATHINFO_EXTENSION) === 'mp3') {
                    
                    $fichiers_mp3[] = [
                            "nom_fichier" => $element->getFilename(),
                            "chemin_relatif" => $element->getPathname(),
                    ];
                    
            }
            
    }
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="UTF-8"/>
    	<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </head>
    <body>
     
    <div id="liste_fichiers"></div>
     
    <audio id="myaudio" controls autoplay></audio>
    <script>
    "use strict";
     
    const fichiers_mp3 = <?php echo json_encode($fichiers_mp3);?>;
     
    const liste_fichiers = document.getElementById("liste_fichiers");
     
    const audio = document.getElementById("myaudio");
    audio["volume"] = 0.3;
     
    fichiers_mp3.forEach(tab_fichier => {
            
            const ligne = document.createElement("div");
            ligne["textContent"] = tab_fichier["nom_fichier"];
            
            ligne.addEventListener("click", e => {
                    audio.src = tab_fichier["chemin_relatif"];
                    audio.play();
            });
            
            
            liste_fichiers.appendChild(ligne);
            
    });
     
    </script>
     
    </body>
     
    </html>

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    je te remercie, je teste dès la fin de mon taff.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/02/2021, 20h04
  2. [D7] décodage d'une chaine
    Par Charly910 dans le forum Débuter
    Réponses: 13
    Dernier message: 03/02/2021, 16h08
  3. Réponses: 7
    Dernier message: 18/03/2015, 11h33
  4. [RegEx] Décodage d'une chaine de connexion
    Par Amuny dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2011, 18h33
  5. Décodage d'une chaine en base 64
    Par hpalpha dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/02/2011, 18h29

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