Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 18h02   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
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
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 19h34   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
tu pourra utilisé la fonction urlencode pour qu'il te décode ta chaîne.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 19h36   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
hop
Code :
$chaine = preg_replace("#[ ,;']+#","-", $chaine);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 21h15   #4
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Merci pour vos reponses.

Citation:
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!

Citation:
Code :
$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 :
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 :
1
2
3
$text = preg_replace( array('/ß/','/&(..)lig;/', '/&([aouAOU])uml;/','/&(.)[^;]*;/'), 
array('ss',"$1","$1".'e',"$1"),  
$text);
Merci infiniment
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 21h21   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ca donnerait ça :
Code :
$chaine = preg_replace("#[ ,.;:'&\"]+#", "-", $chaine);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 21h48   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
pourquoi ne pas faire juste ca :

Code :
$chaine = preg_replace('/\W+/u', '-', $chaine);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 22h26   #7
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
Code :
$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?

Citation:
Code :
$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
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 22h46   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Comme ça alors :
Code :
$chaine = preg_replace("#[ ,.;:'&\-\"]+#", "-", $chaine);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 22h53   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 22h58   #10
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
merci ca marche

je n'ai trouve une explication nulle part, pourrais tu stp me dire la signification de cette ligne?
Code :
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!!
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 23h00   #11
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Code :
1
2
3
4
5
// Nettoyage
$chaine = preg_replace('/[^a-z0-9 ,.;:\'&"-]+/i', '', $chaine);
 
// Remplacement
$chaine = preg_replace('/[ ,.;:\'&"-]+/i', '-', $chaine);
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 23h03   #12
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
c'est ce que tu veux non ?
oui, mais cela peut contenir plus de caracteres a convertir (*,;....

'/\W+/u' correspond a quoi?
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 23h51   #13
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
@Eric2a: voici la fonction que j'utilise maintenant pour le nettoyage et ca marche super bien. elle sert aussi a virer les accents:

Code :
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;
}
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 15h14   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2011, 18h21   #15
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
\W c'est tout les caractères non alphanumériques
OK merci, et meilleurs voeux
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h55   #16
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
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
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h59   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
tu fais un trim après

EDIT : t'as Intl ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h13   #18
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
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

Citation:
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 :
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??
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h26   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
c'est un htmlspecialchars qu'il faut faire

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

Code :
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;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h36   #20
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
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!!
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h26.


 
 
 
 
Partenaires

Hébergement Web