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 :

Supprimer une partie d'une chaine de caractères


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2017
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2017
    Messages : 142
    Par défaut Supprimer une partie d'une chaine de caractères
    Bonjour

    J'aimerais savoir comment supprimer une partie d'une chaine de caractére.
    Cette partie se trouve toujours en début de chaine et commence soit par
    https://
    soit par
    http://
    Par exemple sur la page
    https://guideyourtrip.com/en/tourgui.../rafael-aviles
    Voir Image
    La variable contenant le champ est site_web
    Le code du script php est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	if ($site_web)
    		{
    			$contenu .= "<p>".$site_web."</p>" ;
    		}
     
     
    	if (get_field('site_web',$IDg))
    		{
    			$site_web = "<a class=\"icon-ET icon_globe-2\" href=\"".get_field('site_web',$IDg)."\" target=\"_blank\">".get_field('site_web',$IDg)."</a>" ;
    		}
    Il faut bien entendu que le href continue de fonctioner et que ce ne soit que l'intitulé où on supprime le début https:// ou http://

    Merci pour votre aide

    Nom : img_php.jpg
Affichages : 312
Taille : 77,1 Ko

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Tu peux utiliser str_replace() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $site = 'https://www.google.fr';
    $result = str_replace(['http://', 'https://'], '', $site); // www.google.fr
     
    $site = 'http://www.google.fr';
    $result = str_replace(['http://', 'https://'], '', $site); // www.google.fr
    https://www.php.net/str-replace

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Le str_replace() est une bonne façon de faire et rapide.
    Cependant, si on souhaite s'assurer qu'il s'agit bien du début de la chaîne de caractère, ce n'est pas possible.

    Il vaut alors mieux passer par un preg_replace()
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $site = 'https//www.google.fr';
    $result = preg_replace('/^https?:\/\/(.+)/i', '$1'); // www.google.fr

    • ^ permet de s'assurer qu'on vérifie l'expression au début de la chaîne
    • s? signifie que la lettre "s" est présente 0 ou 1 fois
    • .+ match tout et n'importe quoi mais au moins 1 caractère
    • i en fin d'expression signifie "insensible à la casse"

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2017
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2017
    Messages : 142
    Par défaut
    Donc je vais devoir coder ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (get_field('site_web',$IDg))
    		{
     
    $result_affich_site_web = preg_replace('^/https?:\/\/(.+)/i', 'site_web'); 
    $result_affich_site_web = preg_replace('^/http?:\/\/(.+)/i', 'site_web');
     
    $site_web = "<a class=\"icon-ET icon_globe-2\" href=\"".get_field('site_web',$IDg)."\" target=\"_blank\">".get_field('$result_affich_site_web',$IDg)."</a>" ;
    		}
    ?

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par Gilles_75 Voir le message
    Donc je vais devoir coder ainsi?
    Non car le but de l'expression régulière est justement de décrire plusieurs chaînes possibles, avec http:// ou avec https://. C'est pour ça que le "s" est suivi par le quantificateur ? qui signifie 0 ou 1 fois comme l'a précisé darkstar123456.

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Une autre voie peut être de récupérer les parties qui te plaisent dans l'url (avec parse_url()) pour composer une url esthétique avec.

  7. #7
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $site = 'https//www.google.fr';
    $result = preg_replace('^/https?:\/\/(.+)/i', '$1'); // www.google.fr
    Attention, tu as placé l'ancre ^ avant le délimiteur / (tu peux en choisir un autre pour éviter les échappements par la suite). Tu peux aussi éviter la capture en ne décrivant pas la fin de la chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = preg-replace('~^https?://~i', '', $site);

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2017
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2017
    Messages : 142
    Par défaut
    A coder ainsi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (get_field('site_web',$IDg))
    		{
                    $result_site_web = preg-replace('~^https?://~i', '', 'site_web');
    		$site_web = "<a class=\"icon-ET icon_globe-2\" href=\"".get_field('site_web',$IDg)."\" target=\"_blank\">".  result_site_web."</a>" ;		}

  9. #9
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Cependant, si on souhaite s'assurer qu'il s'agit bien du début de la chaîne de caractère, ce n'est pas possible.
    C'est vrai, bien vu

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2017
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2017
    Messages : 142
    Par défaut
    Merci de bien vouloir m'aider concernant le code php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		if (get_field('site_web',$IDg))
    		{
    		$result_site_web = preg_replace('/^https?:\/\/(.+)/i', 'site_web');
     
     
    			$site_web = "<a class=\"icon-ET icon_globe-2\" href=\"".get_field('site_web',$IDg)."\" target=\"_blank\">$result_site_web</a>" ;
    		}

  11. #11
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Si ton URL est le résultat de la fonction get_field(), c'est bien évidemment elle qu'il faut utiliser :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (get_field('site_web',$IDg))
    {
    	$result_site_web = preg_replace('/^https?:\/\/(.+)/i', get_field('site_web',$IDg));
    	$site_web = "<a class=\"icon-ET icon_globe-2\" href=\"".get_field('site_web',$IDg)."\" target=\"_blank\">$result_site_web</a>" ;
    }

    Et personnellement, voici comment je l'aurais écrit :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $site_web = get_field('site_web',$IDg);
    if (!empty($site_web))
    {
    	$site_web_domain = preg_replace('/^https?:\/\/(.+)/i', $site_web);
    	$site_web = '<a class="icon-ET icon_globe-2" href="' . $site_web . '" target="_blank">' . $site_web_domain . '</a>';
    }
    1. Je mets le résultat de mon get_field() dans une variable. Ca évite de faire plein de fois la requête
    2. Dans les vieilles versions de PHP (5.6), ça permet également de pouvoir tester empty() car on ne pouvait pas le faire sur le résultat d'un appel direct à une fonction
    3. $result_site_web ? Result de quoi ? Un peu vague comme nom de variable. Bien qu'ici, on ne récupère pas exactement que le domaine avec la regex, j'ai quand même opté pour domain dans mon nom de variable
    4. J'utilise des single quote plutôt que des doubles, de façon à ne pas devoir tout le temps échapper les double quotes des attributs HTML

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/05/2010, 19h52
  2. Supprimer une chaine de caractère
    Par SSDCoyote dans le forum Général Python
    Réponses: 1
    Dernier message: 20/11/2009, 13h53
  3. Supprimer une chaine de caractère
    Par islyoung2 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 23/08/2009, 22h59
  4. Supprimer une chaine de caractéres
    Par gentelmand dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 11/04/2009, 13h05
  5. Requète supprimer une chaine de caractères
    Par PhRey dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/02/2008, 11h20

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