Version complète: sur le forum Webmaster Hub : Remplacement dans une chaine
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Poppy
Bonjour smile.gif

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 ? blush.gif

Comment faire ? unsure.gif

Merci énormément d'avance,

Poppy hypocrite.gif

PS: je vous montrerai mon modeste projet qd il sera fini wink.gif
michmuch51
Salut Poppy, à tout hasard je te dirai d'utiliser la fonction:

CITATION
<?
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 whistling.gif )
MarvinLeRouge
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 :
CITATION
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.
Poppy
Merci bcp pour vos réponses, je teste ça de suite wink.gif
Dan
Salut Poppy,

L'utilisation de ereg_replace et de classes de caractères POSIX devrait te permettre d'obtenir ce que tu cherches.

CODE
<?php
setlocale(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 wink.gif

Dan
Poppy
Il prend les caractères comme un caractère non alpha, normal ? sad.gif
Dan
Oui, c'est normal.. mais tu peux les rajouter dans l'expression, comme par exemple:
CODE
$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
MarvinLeRouge
Pourquoi ne pas utiliser preg_replace, qui est (selon la doc) plus rapide et plus complet ?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.