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 :

preg_replace un caractère avec espace avant et après [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut preg_replace un caractère avec espace avant et après
    Bonjour, je pense que je n'ai pas ete tres clair dans le titre, mais je n'ai pas trouve mieux!!

    je m'explique: pour mes reecriture d'url en utilisant le titre, je vais devoir "netoyer" le titre en retirant les caracteres speciaux et accents, puis remplacer les espaces, virgules, point virgule, ... par un tiret (-)
    disant que je veux faire ce traitement pour cette chaine "bonjour, j'aimerais faire cela" ca deviendra "bonjour--j-aimerais-faire-cela"
    et donc le probleme que j'ai c'est les 2 tirets!

    y a t il un moyen de remplacer la virgule ainsi que les espaces avant et apres par un tiret??

    Merci bien

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    tu pourra utilisé la fonction urlencode pour qu'il te décode ta chaîne.
    A la recherche d'un film : http://chercher-un-film.com

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    hop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("#[ ,;']+#","-", $chaine);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci pour vos reponses.

    tu pourra utilisé la fonction urlencode pour qu'il te décode ta chaîne.
    je connais urlencode et c'est pas trop ce que je cherche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("#[ ,;']+#","-", $chaine);
    wow c'est magique, merci beaucoup

    j'aurais 2 autres petites questions svp:
    ca marche pas lorsque je veux egallement remplacer " par -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = "bonjour \"ici texte";
    $chaine = preg_replace("#[ ,.;:'&-\"]+#", "-", $chaine);
    saurais tu pourquoi?

    j'ai trouve un code pour supprimer les caracteres speciaux et accents

    qu'en penses tu? qu'est ce que c'est cette ligne, j'ai rien compris!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $text = preg_replace( array('/ß/','/&(..)lig;/', '/&([aouAOU])uml;/','/&(.)[^;]*;/'), 
    array('ss',"$1","$1".'e',"$1"),  
    $text);
    Merci infiniment

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ca donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("#[ ,.;:'&\"]+#", "-", $chaine);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    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 726
    Points
    10 726
    Par défaut
    pourquoi ne pas faire juste ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace('/\W+/u', '-', $chaine);

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("#[ ,.;:'&\"]+#", "-", $chaine);
    et pourquoi tu as retiré le tiret ?? j'en ai aussi besoin pour remplacer par exemple "ici - texte" par "ici-texte".
    l'ordre des elements a remplacer (,: a de l'importance?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace('/\W+/u', '-', $chaine);
    j'ai essaye cette ligne mais ca marche pas, j'obtiens un resultat qui ne correspond pas du tout a ma chaine d'aorigine!

    je viens de me rendre compte que j'ai pas mis le lien de la page où j'ai trouve le code pour supprimer les accents et caracteres speciaux
    http://www.3gk-software.com/Traiteme...-speciaux.html

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace("#[ ,.;:'&\-\"]+#", "-", $chaine);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    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 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redah75 Voir le message
    j'ai essaye cette ligne mais ca marche pas, j'obtiens un resultat qui ne correspond pas du tout a ma chaine d'aorigine!
    je sais ce que tu fais mais avec la chaine : bonjour, j'aimerais faire cela
    ca donne : bonjour-j-aimerais-faire-cela

    c'est ce que tu veux non ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    merci ca marche

    je n'ai trouve une explication nulle part, pourrais tu stp me dire la signification de cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace( array('/ß/','/&(..)lig;/', '/&([aouAOU])uml;/','/&(.)[^;]*;/'), array('ss',"$1","$1".'e',"$1"), $text);
    c'est censé virer les accents, ca le fait bien mais j'ai un peu de mal a comprendre!!

  11. #11
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Nettoyage
    $chaine = preg_replace('/[^a-z0-9 ,.;:\'&"-]+/i', '', $chaine);
     
    // Remplacement
    $chaine = preg_replace('/[ ,.;:\'&"-]+/i', '-', $chaine);

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    c'est ce que tu veux non ?
    oui, mais cela peut contenir plus de caracteres a convertir (*,;....

    '/\W+/u' correspond a quoi?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    @Eric2a: voici la fonction que j'utilise maintenant pour le nettoyage et ca marche super bien. elle sert aussi a virer les accents:

    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
    function nettoyer_chaine($string) {
     
    	// remplacer qlq elements non echapés par la fonction mb_convert_encoding ('\'', '"', and '&')
    	$string = preg_replace("#[ ,.;:'&\-\"]+#", "-", $string);
     
    	$string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8');
     
    	// replacer accents et espaces
    	$string = preg_replace(array('/ /', '/ß/', '/&(..)lig;/', '/&([aouAOU])uml;/', '/&(.)[^;]*;/'), array('-', 'ss', "$1", "$1".'e', "$1"), $string);
     
    	// supprimer caracteres speciaux excepte '-'
    	$string = preg_replace("/[^a-z0-9-]/i", '', $string);
     
    	return $string;
    }

  14. #14
    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 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redah75 Voir le message
    oui, mais cela peut contenir plus de caracteres a convertir (*,;....

    '/\W+/u' correspond a quoi?
    \W c'est tout les caractères non alphanumériques

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    \W c'est tout les caractères non alphanumériques
    OK merci, et meilleurs voeux

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Je reviens vers vous pour une dernière chose:
    j'utilise la fonction citée au post #13 pour enlever les caracteres speciaux et les accents. ça marche super bien mais par contre j'aimerais que les caractères spéciaux ne soient pas remplacés lorsqu'ils sont a la fin d'une phrase.
    par exemple:
    bonjour je m'appelle "reda" ==> bonjour-je-m-appelle-reda-

    comment faire pur qu'il ne mette pas de tiret au début et a la fin d'une chaine de caractère??

    Merci beaucoup

  17. #17
    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 726
    Points
    10 726
    Par défaut
    tu fais un trim après

    EDIT : t'as Intl ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ah genial, ça marche, j'avais complètement oublié trim(), je m'en sers d'habitudes uniquement pour enlever les espaces...
    Et merci beaucoup pour la réponse très rapide

    EDIT : t'as Intl ?
    Non je l'ai pas, pouquoi??

    puisque j'y suis, lorsque j'ai un titre qui contient ", et que je l'affiche dans un champ de text, tout ce qui suit " ne s'affiche pas, le navigateur croit que c'est la fermeture de l'attribut value.
    Ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre = je m'appelle "reda";
    <input type="text" value="<?php echo $titre ?>">// affiche: je m'appelle
    j'ai essaye avec un addslashes mais ça ne donne rien, aurais tu une idée??

  19. #19
    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 726
    Points
    10 726
    Par défaut
    c'est un htmlspecialchars qu'il faut faire

    EDIt : si t'avais Intl t'aurai pu faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $str = "bonjour, j'aimerais faire cela, héhé ";
     
    $str = Normalizer::normalize($str, Normalizer::FORM_KD);
    $str = iconv('UTF-8', 'ASCII' . ('glibc' !== ICONV_IMPL ? '//IGNORE' : '') . '//TRANSLIT', $str);
    $str = preg_replace('/[\W-]+/u', '-', $str);
    $str = trim($str, '-');
     
    echo $str;

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    UN GRAND MERCI
    Me conseille tu de mettre htmlspecialchars dans tous mes formulaire??
    j'imagine que pour le nom, prénom, ville, ... ce n'est pas très utile!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Supprimer les espaces avant et après un caractère
    Par KaliMero973 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2013, 10h20
  2. [XSLT] enlever espace avant et après un string
    Par nagdrir dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 10/09/2007, 16h18
  3. Exec avec paramètres avant et après exécutable
    Par blinkz0rz dans le forum ANT
    Réponses: 3
    Dernier message: 20/07/2006, 14h46
  4. Espacement avant et après la balise <form>
    Par yoyot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2006, 09h23
  5. [CSS]Taille de l'espacement avant et après d'un paragraphe
    Par Andry dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 20/02/2006, 12h26

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