Suprimer un caractère, et non le remplacer par un espace.

Eléphant du PHP | 246 Messages

31 déc. 2005, 04:21

Salut tout le monde...! J'ai une fonction qui remplace les caractère ÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõ en caractère sans accent :
function suppaccents($titre){
$accents = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ :,.;?!~'´()/&%*\"$[]{}|";
$ssaccents = "abcdefghijklmnopqrstuvwxyzAAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn-----------------------";
return(strtr($titre,$accents,$ssaccents));
} 
Mais pour les caractère spéciaux comme ceux là :,.;?!~'´()/&%*\"$[]{}| jaimerais pouvoir les suprimer de la chaine, et pas simplement les remplacé par un espace ou alors pas un tiret -

Si quelqun sait...

merci d'avance :D

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 déc. 2005, 04:49


/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

31 déc. 2005, 11:07

Proposition :
<?php
function suppaccents($titre)
{
    $accents     = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
    $ssaccents   = "abcdefghijklmnopqrstuvwxyzAAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
    $speciaux    = " :,.;?!~'´()/&%*\"$[]{}|";
    $chssaccent  = strtr($titre,$accents,$ssaccents);
    $chsscarspec = str_replace($speciaux, "", $chssaccent);
    return($chsscarspec);
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

31 déc. 2005, 14:43

Merci d'avoir répoondu.

Mais c'est bizard, ça ne marche pas. Les accents sont bien remplacés par des caractères sans accent, mais les caractères spéciaux reste dans la chaine :?

Aufaite jai jamais créé une fonction (celle la je lai trouvé sur un site) mais jai une autre question :
function suppaccents($titre) 
Pour la variable $titre, il faut aussi que ma chaine aie comme variable $titre c'est sa ?

Merci d'avance

Mammouth du PHP | 19672 Messages

31 déc. 2005, 15:59

Non, la fonction reçoit un paramètre ici nommé "$titre" : son utilisation est la suivante :
$texte = "bla bla...";
/* On traite le texte en faisant appel à la fonciton en envoyant le paramètre attendu */
$retour = suppaccents($texte);
Comme tu peux voir, le nom de la variable envoyée en paramètre lors de l'appel est différent du nom du paramètre inscrit dans la fonction elle-même, mais c,est sans imoprtance, PHP va utiliser le contenu et non le contenant, les variables étant les contenants.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

31 déc. 2005, 16:33

Ok merci!

Et pour ce problème, d'ou ça vient ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 déc. 2005, 18:33

je n'avais pas donné plus d'infos sur mon post car j'estimais que l'exemple de la doc était très bien :?

Tiré de la doc:
// Génère : Bnjr l mnd
$voyelles = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
echo $consonnes = str_replace($voyelles, "", "Bonjour le monde");
donc pour ton cas:
$speciaux    = array(":",",",".",";","?","!","~","'","´","(",")","/","&","%","*","\\","\"","$","[","]","{","}","|")
$chsscarspec = str_replace($speciaux, "", $chssaccent);
Il faut placer les caratères dans un array.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 246 Messages

31 déc. 2005, 19:20

Effectivement ça marche maintenant :D

Merci beaucoup.

Et pour la doc, jai toujours un peu du mal a comprendre leur explication.

Merci encore