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 :

Remplacement d'URLs à la volée


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut Remplacement d'URLs à la volée
    Bonjour,

    J'ai une variable du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $montexte='blabla <a href="http://www.toto.com/toto.html">blabla</a> blablabla <a href="http://www.pouet.com/pouet.html">blabla</a> blablabla';
    Mon but est de remplacer ces liens par des redirections :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $montexte='blabla <a href="http://www.monsite.com/lien.php?id=1">blabla</a> blablabla <a href="http://www.monsite.com/lien.php?id=2">blabla</a> blablabla';
    Capter chaque url pour la remplacer.
    Avant de vous solliciter j'ai regardé les regex, remplacer une url ne pose pas de problème mais plusieurs si, je n'y arrive pas.

    Si quelqu'un pouvait me donner un coup de pouce ce serait fooooormidable.

    Merci à vous.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    quelque chose comme ça :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $str = 'blabla <a href="http://www.toto.com/toto.html">blabla</a> blablabla <a href="http://www.pouet.com/pouet.html">blabla</a> blablabla';
     
    $id  = 0;
    $i   = 0;
    $len = strlen($str);
    $url = [];
     
    while (($start = stripos($str, 'href="', $i)) !== false)
    {
        $end = stripos($str, '"', $start + 6);
        if ($end === false)
        {
            break;
        }
     
        $url[substr($str, $start + 6, $end - $start - 6)] = 'http://www.monsite.com/lien.php?id='.++$id;
     
        $i += ++$end;
        if ($i >= $len)
        {
            break;
        }
    }
     
    $new_str = str_replace(
        array_keys($url),
        $url,
        $str
    );

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    En un peu moins de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $str = 'blabla <a href="http://www.toto.com/toto.html">blabla</a> blablabla <a href="http://www.pouet.com/pouet.html">blabla</a> blablabla';
    $id  = 0;
     
    $str = preg_replace_callback( '# href="[^"]+"#', function ( $matches ) use ( &$id ) {
       $id++;
       return ' href="http://www.monsite.com/lien.php?id=' . $id . '"';
    }, $str );

  4. #4
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut
    Mhh comment dire Woooow !

    Un grand merci à vous deux c'est parfait

  5. #5
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut
    Mhhh... juste une dernière chose comment insérer dans ma base l'ancienne url pour faire la correspondance ?

    Je suis désolé.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $str = preg_replace_callback( '# href="[^"]+"#', function ( $matches ) use ( &$id ) {
       $id++;
       mysql_query("INSERT INTO `links` (`linkID`, `link`) VALUES ('$id', 'XXXXX')");
     
       return ' href="http://www.monsite.com/lien.php?id=' . $id . '"';
    }, $str );
    Merci

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Il faut que tu catches l'URL dans l'expression régulière et que tu utilises le match dans ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $str = preg_replace_callback( '# href="([^"]+)"#', function ( $matches ) use ( &$id ) {
       $id++;
       var_dump( $matches[1] );
     
       return ' href="http://www.monsite.com/lien.php?id=' . $id . '"';
    }, $str );
    Après, je te conseille de construire ta requête d'INSERT pour n'en faire qu'une grosse à la fin du preg_replace_callback(), histoire d'optimiser le script (si tu as 15 URLs, ça ne fera qu'une seule requête d'INSERT au lieu de 15).

    Sans oublier de bien protéger tes données pour éviter les injections SQL.

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

Discussions similaires

  1. [RegEx] Remplacement d'URLs par des URLs cliquables
    Par khayyam90 dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2011, 19h29
  2. Remplacer un caractère à la volée
    Par BLJ.CHAUVIN dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/09/2010, 15h23
  3. lien qui ajoute au lieu de remplacer l'url
    Par dkmatt dans le forum Django
    Réponses: 1
    Dernier message: 26/04/2010, 13h31
  4. Réponses: 4
    Dernier message: 11/02/2008, 19h43
  5. remplacer un caractere à la volée
    Par philippe123 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/10/2006, 22h40

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