Remplacer les ? et ponctuation ainsi que les espaces dans une chaine de caractèr

Signaler
Messages postés
95
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
7 avril 2011
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjour j'ai une chaine de caractère qui est du type ...

$chaine = 'bien choisir son pc ?';

dans cette chaine je voudrais supprimer les ponctuations :  .,?!:...

et ensuite remplacer les espaces par _

pour arriver à une chaine modifiée du genre :

$chainemodifiee = 'bien_choisir_son_pc';

merci de votre aide précieuse.
A voir également:

12 réponses

Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Yop!
$chaine = str_replace( array( '?', ',', '.', ':', '!'), '_', $chaine );

A toi de lister ce que tu veux... :)

@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut
utilise preg_replace
Messages postés
95
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
7 avril 2011

merci a vous deux ..

cookiesch ce que tu m'as indiqué remplace toute la ponctuation par _ moi ce que je voudrais c'est d'abord supprimer la ponctuation de la chaine et ensuite remplacer les espaces par _

$chainedepart = 'bien choisir son pc ?';

$chianemodifiee = 'bien_choisir_son_pc';

merci pour votre aide ...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
un truc genre ca
$q=preg_replace('/[:ponc:]/', '_', $q);
$q=preg_replace('/[:space:]/', '_', $q);

lis la doc sur les pregs
Messages postés
95
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
7 avril 2011

bon j'ai lu la doc ...
voila ce que j'ai essayé de faire ..  et ca ne donne rien .. je ne sais plus comment faire là ...

$chaine = $titrearticle ;
function OterAccents($chaine) {
return( strtr( $chaine,
 "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
 "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) );
 }
$patterns[0] = '/?/';
$patterns[1] = '/:/';
$patterns[2] = '/./';
$patterns[3] = '/;/';
$patterns[4] = '/!/';
$patterns[5] = '/\'/';
$replacements[5] = '';
$replacements[4] = '';
$replacements[3] = '';
$replacements[2] = '';
$replacements[1] = '';
$replacements[0] = '';
$chaine = preg_replace($patterns, $replacements, $chaine);
$chaine = str_replace( '', '_', $chaine );

merci de votre aide
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
Bon déjà je dis un grand "LOL" pour ton code Loupile.
Comment tu comptes replacer du vide '' par un underscore _ ?

L'idée d'utiliser un "preg_replace" n'est pas mal mais si la chaine contient des crochets ou tout autres caractères d'une expression régulière c'est fichu.

Donc il faut appliquer un "str_replace" comme la dis "coockiesch" se qui donnera : <?php
$chaine = 'bien choisir son pc ?';
$chaine = str_replace(array('.', ',', '?', '!', ':', '_', ' ', '.'), '_', $chaine);
echo$chaine;
?>

For every choice, a consequence (Fable)
Messages postés
95
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
7 avril 2011

alors je m'en suis sorti seul ...  voici ce que j'ai fais .. .ca marche super ...
comme quoi on peut remplacer du vide par _ .... audayls :-p

function OterAccents($chaine) {
return( strtr( $chaine,
 "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
 "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) );
 }
$chaine = OterAccents($chaine);
function ponctuation($chaine) {
return( strtr( $chaine,
"?...:!,.\'-",
"           ") );
}
$chaine = ponctuation($chaine);
$chaine = trim($chaine);
$chaine = str_replace( ' ', '_', $chaine );
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

"comme quoi on peut remplacer du vide par _ .... audayls :-p"
Nan nan nan on ne peut pas

Ce n'est pas le même paramètre search dans les 2 "str_replace" : le premier c'est '' (une chaine string vide) et le second c'est ' ' (une chaine string contenant un espace) c'est là la différence

For every choice, a consequence (Fable)
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
Hello,

voici une solution possible:

<?php
$string = "bien choisir son pc";

$pattern = array('#\s#i','#\W#i');
$replacement = array('_','');
$result = preg_replace($pattern,$replacement,$string);

echo $result;
?>

Parsing à améliorer !
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
...

http://fr3.php.net/manual/fr/reference.pcre.pattern.syntax.php
<?php

$q='test, test';
$q=preg_replace('/\p{P}/', '', $q);
$q=preg_replace('/\s/', '_', $q);

echo $q;

?>



vous n'avez pas du chercher longtemps en direction de la piste que j'avais donne... ca m'a pris deux minutes
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Bizarre bizarre sur ma version de PHP celà ne fonctionne pas mais sur lorsque je l'essaye sur une autre version tout va impecable... C'est quoi cette arnaque o_O (manques de chance encore une fois...)
Bon on s'en fout après tout... je mets à jours Wamp

For every choice, a consequence (Fable)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
Salut,

faudrait faire reponse accepter...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy