Poppy Posté 28 Mai 2005 Partager Posté 28 Mai 2005 Bonjour Je souhaiterai remplacer dans une chaine (longue, comme un texte) tout caractère non alphabétique par un espace ? Est ce que "é", par exemple, est considérée comme une lettre ? Comment faire ? Merci énormément d'avance, Poppy PS: je vous montrerai mon modeste projet qd il sera fini Lien vers le commentaire Partager sur d’autres sites More sharing options...
michmuch51 Posté 28 Mai 2005 Partager Posté 28 Mai 2005 Salut Poppy, à tout hasard je te dirai d'utiliser la fonction: <?function formea($text) { $text=ereg_replace('expression régulière','ton espace', $text); return $text; } ?> Dans un fichier à part puis ensuite tu l'appelles ainsi: include(ton fichier); echo formea(ton texte) par contre il te faut trouver l'expression régulière qui te convient (mais en effet é est normalement considéré comme une lettre (enfin à mon avis ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 28 Mai 2005 Partager Posté 28 Mai 2005 Salut, Je ne sais pas si ereg_replace permettra de définir les caractères éventuellement accentués, mais l'utilisation de preg_replace le permettra probablement, comme indiqué dans le manuel php, à la description des fonctions PCRE : Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl. La définition des lettres et chiffres est définie par les tables de caractères de PCRE, et peut varier suivant la table locale de caractère (voir "Tables de caractères locales ", ci-dessus. Par exemple, dans la configuration "français" ("fr"), certains caractères ont des codes supérieurs à 128, pour les caractères accentués, et ils seront compris par le méta-caractère \w. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poppy Posté 29 Mai 2005 Auteur Partager Posté 29 Mai 2005 Merci bcp pour vos réponses, je teste ça de suite Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 29 Mai 2005 Partager Posté 29 Mai 2005 Salut Poppy, L'utilisation de ereg_replace et de classes de caractères POSIX devrait te permettre d'obtenir ce que tu cherches. <?phpsetlocale(LC_CTYPE,'fr_FR');$chaine="Il fait 30° sous le soleil éblouissant de Marseille";$chaine=ereg_replace("[^[:alpha:][:space:]]{2,}","beau",$chaine);print $chaine;?> Donnera en impression: "Il fait beau sous le soleil éblouissant de Marseille" Dans l'exemple ci-dessus, l'expression dit de remplacer toute chaîne non alpha ou espace comprenant 2 caractères au minimum par le mot beau Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poppy Posté 29 Mai 2005 Auteur Partager Posté 29 Mai 2005 Il prend les caractères comme un caractère non alpha, normal ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 29 Mai 2005 Partager Posté 29 Mai 2005 Oui, c'est normal.. mais tu peux les rajouter dans l'expression, comme par exemple: $chaine=ereg_replace("[^[:alpha:][:space:]éàèçù]","beau",$chaine); La classe prédéfinir [:alpha:] comme [:space:] sont des raccourcis permettant d'éviter de lister les caractères. Si tu veux uniquement remplacer les signes de ponctuation, tu peux utiliser [:punct:], ou encore [:cntrl:] pour les caractères de contrôle. Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 29 Mai 2005 Partager Posté 29 Mai 2005 Pourquoi ne pas utiliser preg_replace, qui est (selon la doc) plus rapide et plus complet ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant