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 :

imposer un espace [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut imposer un espace
    Bonjour,

    Ces 2 lignes entrent en conflit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $texte = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0" target="_blank">$0</a>', $texte);
     
    $texte = preg_replace('`\[img\](.+)\[/img\]`isU', '<img src="$1"/>', $texte);
    Comment faire svp pour que le premier preg_replace ne remplace une url qu'à condition qu'il y ait un espace avant et après ?

    Car le soucis c'est que je me retrouve avec des balises quand une image est postée sur mon forum.

    Merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par guitz Voir le message
    Comment faire svp pour que le premier preg_replace ne remplace une url qu'à condition qu'il y ait un espace avant et après ?
    En ajoutant les espaces à la regex ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = preg_replace('#\shttp://[a-z0-9._/-]+\s#i', '<a href="$0" target="_blank">$0</a>', $texte);

  3. #3
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Désolé mais ça ne marche pas. C'est quoi #i svp ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par guitz Voir le message
    Désolé mais ça ne marche pas. C'est quoi #i svp ?

    tout est dans la doc
    http://www.php.net/manual/fr/referen....modifiers.php

  5. #5
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Ce que fait votre code c'est qu'à chaque fois que je met une url correspondant à un fichier image, il me met les balise :

    Or je souhaite que quand on met une url unique sans balise bbcode on ai un lien html vers cette url. Et que si on souhaiteafficher l'image à ce moment là on met les balises bbcode :

  6. #6
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Au temps pour moi c'est moi qui m'étais emmellé les pinceaux, ça marche en fait Celira ya plus de conflit par contre à présent les liens seuls ne fonctionnent plus, une idée ?

    Merci de m'avoir répondu

    Edit : En fait les liens fonctionnent mais le soucis c'est que si d'entrée le mec met un lien dans son message ya pas d'espace avant mais un après, alors comment pourrais-je modifier le regex pour que "il faut soit un espace avant soit après l'url" ?

  7. #7
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    Oui ça me ferait pas de mal d'apprendre les bases des regex

  8. #8
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Bonjour bon bin j'ai trouvé comme un grand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $texte = preg_replace('#\s*[^\]]http://[a-z0-9._/-]+[^\]]\s*#i', '<a href="$0" target="_blank">$0</a>', $texte);
    de chaque coté pour qu'il y ait soit 0 soit un soit nombre strictement positif d'espaces avant et après l'url et pour pas de conflit avec les balises phpbb image j'ai mis :

    de chaque coté

    Et maintenant pour être vraiment tip top, il faut que j'impose au maximum arpès le point de l'url 3 caractères, le maximum c'est .com ? Car si un utilisateur met une url et oublie l'espace à la fin je vais me retrouver avec un lien du genre http://www.google.comsalut

    Merci

  9. #9
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Bonjour, ça ne marche pas en fait, comment svp échapper un crochet dans un regex ?

    "un crochet ne doit pas apparaitre"
    "un a ne doit pas apparaitre"

    edit: j'ai essayé ceci mais ça ne marche pas si la chaine commence par l'url sans espace avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = preg_replace('#\s*[^]]http://[a-z0-9._/-]+[^[]\s*#i', '<a href="$0" target="_blank">$0</a>', $texte);
    Traduction : zero ou plusieurs espaces avant, puis pas de crochet fermant puis puis pas de crochet ouvrant puis zero ou plusieurs espaces LE TOUT pas sensible à la casse.

    Je ne comprends pas ça devrait marcher, une idée ?

  10. #10
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    oui parce que ton "pas de crochet" va consommer ton h de http, apres il tombe sur le t (de http) alors que la regex s'attend au h de (http) .

    tu ne peux pas tout accepter et tout corriger. conclusion si tu as des trucs trop complexe a analyser tu les refuses pis l'utilisateur corrigera tout seul.

    ya quand meme une chose que je ne comprends pas. ta regex ne comporte pas de masque de capture donc c'est toute la capture qui est retournée dans $0, donc aussi les caracteres indésirables: espace-blanc, non-crocher. Ton lien ne sera pas valide ?!?

    ce qui est le plus domage c'est que je vois pas comment utiliser filter_var() ici.

  11. #11
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Points : 746
    Points
    746
    Par défaut
    Salut gene69,

    T'as raison faut pas non plus pousser le perfectionnisme jusque là, finalement j'ai trouvé une solution convenable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $texte = preg_replace('`\[img\]http:(.+)\[/img\]`isU', '<img src="$1"/>', $texte);
     
    	$texte = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0" target="_blank">$0</a>', $texte);
    pour une balise image phpbb l'url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.machin.com/image.jpg
    est transformée en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //www.machin.com/image.jpg
    Donc a partir de la le second preg_replace ne va pas toucher à l'url qui est dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="//www.machin...."/>
    Et donc plus de conflits, ensuite c'est sans espace donc lien peut être mis en début de post et en fin de post , ensuite c'est à l'utilisateur de penser à mettre un espace entre son texte et le lien

    bonne soirée, merci à toi, résolu.

  12. #12
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    ok comme tu veux

    sinon j'aurai vu pour les images
    #\[img\](http://[^\s]*)\[img\]#i

    (quelque chose qui est dans une balise img)

    et pour les url en lignes.. sais pas trop.
    #[^"](http://[^\s]*)

    quelque chose qui ne commence pas par un "http comme dans tous les liens href="http://". Le seul probleme c'est que ça marchera pas s'il n'y a pas un caractère quelconque avant l'url... sinon même probleme.

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

Discussions similaires

  1. Imposer 4 espace à mon toolssLabel
    Par Mario Rousson dans le forum VB.NET
    Réponses: 0
    Dernier message: 24/08/2010, 00h09
  2. Réponses: 9
    Dernier message: 06/11/2007, 13h36
  3. Réponses: 2
    Dernier message: 06/12/2002, 08h50
  4. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 13h37

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