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 :

carctère qui disparait ?


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut carctère qui disparait ?
    Bonjour,

    Je ne comprend pas pourquoi mon regex (qui ne remplace les liens que dans meme repertoire, pas ceux commençant par # ou par http) enlève le premier caractère :
    01.php devient 1.php et 02.php devient 2.php

    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
    $texte = '
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce  nec ante euismod, luctus nunc quis, bibendum ante.</p>
    <p><a href="https://www.google.com" target="_blank">lien externe 1</a></p>
    <p>Avoir une <a href="#ancre01">ancre 1</a></p>
    <p><a href="01.php">lien dans meme repertoire 1</a></p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec ante euismod, luctus nunc quis, bibendum ante.</p>
    <p><a href="02.php">lien dans meme repertoire 2</a></p>
    <p>Avoir une <a href="#ancre02">ancre 2</a></p>
    <p><a href="https://www.google.com" target="_blank">lien externe 2</a></p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce  nec ante euismod, luctus nunc quis, bibendum ante.</p>
    ';
    
    $pattern = Array('~href="[^http|#]~'); // [^https|#]
     
    $replacement = Array('href="https://www.mon-site.com/');
    
    $output = preg_replace($pattern, $replacement, $texte);
    
    echo $output;
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec ante euismod, luctus nunc quis, bibendum ante.</p> <p><a href="https://www.google.com" target="_blank">lien externe 1</a></p>
    <p>Avoir une <a href="#ancre01">ancre 1</a></p>
    <p><a href="https://www.mon-site.com/1.php">lien dans meme repertoire 1</a></p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec ante euismod, luctus nunc quis, bibendum ante.</p>
    <p><a href="https://www.mon-site.com/2.php">lien dans meme repertoire 2</a></p>
    <p>Avoir une <a href="#ancre02">ancre 2</a></p>
    <p><a href="https://www.google.com" target="_blank">lien externe 2</a></p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec ante euismod, luctus nunc quis, bibendum ante.</p>
    Merci d'avance à tous ceux qui prendront du temps pour m'aider ....

  2. #2
    Membre confirmé
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Points : 545
    Points
    545
    Par défaut
    Bonjour,

    Le caractère "^" dans la regex va récupérer le premier caractère d'une chaine ne contenant pas https ou #. C'est pour cela qu'il te remplace le 0.
    Dans ton cas il te faudrait intégrer une condition dans ta regex, plutôt que le caractère ^

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    A partir du moment ou tu dois traiter de l'html/xml tu devrais envisager de passer par DomDocument plutôt que des regex

    Les regex seront probablement un peu plus rapides , mais c'est relativement difficile d'avoir quelque chose de robuste puisque les regex ne "comprennent" pas le code , elle ne font que chercher du texte.
    Au contraire avec un parser comme DomDocument il est aisé de trouver chaque <a> (par exemple) et d'en modifier l'attribut href indépendamment de tout ce qu'il y'a autour.

    Exemple simple : que se passe t'il avec ta regex si tu as un text du genre : href="01.php" dans un div par exemple ? Ce n'est pas un lien , tu ne voudrais probablement pas le remplacer et pourtant il va passer à la moulinette aussi.

  4. #4
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut
    Bonjour,
    Merci à tous les deux pour vos réponses.
    Il semblerai que j'ai trouvé la solution avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Si on trouve href=" non suivi de http ou non suivi de #
    $texte = preg_replace('#href="(?!http|\#)#i', 'href="https://www.mon-site.com/', $texte);

Discussions similaires

  1. [CSS] Menu qui disparait derriere un champ
    Par Pepito dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 06/09/2005, 10h03
  2. Texte qui disparait sous internet explorer.
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 14/08/2005, 02h55
  3. Tooltip qui disparait et mis en forme
    Par xtest dans le forum MFC
    Réponses: 17
    Dernier message: 17/04/2005, 22h52
  4. [WebForms][Javascript] Une DropDownList qui disparait....
    Par prem's dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 02/03/2005, 10h50
  5. LABEL QUI DISPARAIT SUR UN PICTUREBOX !
    Par Sophie42 dans le forum MFC
    Réponses: 2
    Dernier message: 13/01/2004, 12h10

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