Comment enlever/trouver tous les caractères "spéciaux&q

  • Auteur de la discussion Auteur de la discussion thierry8
  • Date de début Date de début
WRInaute accro
Bonjour,

Comment est-il possible de modifier tous les caractères spéciaux d'une chaine (ex: é, à, ù, etc...) par leur équivalent non accentué ?

En php.
 
WRInaute discret
a ma connaissance, il faut de faire une fonction:
str_replace(array("é","è"),array("e","e"),$str) ou un truc du style
 
WRInaute accro
Code:
$nom=strtr($nom,"()!$'?:
    ,&+-/.ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
    "--------------SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");
Avec ça, ça devrait le faire :wink:
 
WRInaute accro
ah ok tout simplement.
Je pensais qu'il y avait peu être un équivalent en php.
Une fonction déjà existante.

Et bien je te remercie beaucoup !!!!!!!!
 
WRInaute accro
Oui, mais en général, quand on veut enlever tous les caractères accentués d'une chaîne c'est pour créer une url propre, et justement pour éviter d'avoir des é dans l'url
 
WRInaute passionné
Si c'est pour une url :

Code:
function str2url ($str) {

               $str = strtr($str,"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
               "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn");

               $str = strtolower(trim ($str) ) ;

               $str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
               $str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
               $str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

               return ($str) ;

}
 
WRInaute accro
MON MESSAGE A ETE SUPPRIME ?

rottman a dit:
Si c'est pour une url :

Code:
function str2url ($str) {

               $str = strtr($str,"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
               "AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNn");

               $str = strtolower(trim ($str) ) ;

               $str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
               $str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
               $str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;

               return ($str) ;

}

Pour ma compréhension:

Code:
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
Pourquoi \-\.,\* ?

Code:
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;
:?: :? :?:

Et pourquoi mette / en début et fin de chaine sur le preg ?


En tout cas, merci. C'était justement pour une url.
 
WRInaute accro
Oui mais il est utile de savoir comment fonctionne ce que l'on utilise, non ?

Code:
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
Là, il n'est indiqué que quelques signe de ponctuation...

Code:
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
Là, je ne saisis pas...
Le substr('\\1', 0, 1) travail sur rien ?
Si quelqu'un pouvait m'expliquer.... :?

Code:
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;
ALors la, grand mystère....
Deux fois [^a-z0-9]|[^a-z0-9] avec un OU entre ????? 8O

Ca serait vraiment cool, si quelqu'un de calé dans les expressions régulières pouvait filler un coup de main ! ;)
 
WRInaute discret
C'est pour formater un nom de domaine? c'est ça?

thierry8 a dit:
Oui mais il est utile de savoir comment fonctionne ce que l'on utilise, non ?

Code:
$str = preg_replace ('/[^a-z0-9\-\.,\*]/', '-', $str) ;
Là, il n'est indiqué que quelques signe de ponctuation...

Ce sont les caractères autorisés dans un nom de domaine. Si c'est pour une adresse complète, il manque au moins les caractères "?/=&,%;:". Enlever cette ligne ne serait pas un mal, ou bien la remplacer par quelque chose comme
Code:
$str = preg_replace ('/[^a-z0-9:=&%\-\.\,\?\/,\*]/', '', $str) ;
et j'ai la désagréable sensation d'avoir oublié des caractères :?

thierry8 a dit:
Code:
$str = preg_replace ('/([\-\.,\*]{2,})/ue', "substr('\\1', 0, 1)", $str) ;
Là, je ne saisis pas...
Le substr('\\1', 0, 1) travail sur rien ?
Si quelqu'un pouvait m'expliquer.... :?

Les caractères "-." qui seront consécutivement en double ou plus seront réduit à un seul caractère. Par exemple, "-----.." deviendra "-.". le "\\1" dans le "substr" est le résultat de la parenthèse "([\-\.,\*]{2,})". Par contre, un nom de domaine "a---b.com" est tout à fait légal, mais cette ligne le transformera en "a-b.com". Donc le "-" serait à enlever du range et pour une adresse complète du style "http://www.example.com/test..html" est, il me semble, tout à fait légal. Donc je dirais d'enlever tout simplement cette ligne.

thierry8 a dit:
Code:
$str = preg_replace ('/^[^a-z0-9]|[^a-z0-9]$/', '', $str ) ;
ALors la, grand mystère....
Deux fois [^a-z0-9]|[^a-z0-9] avec un OU entre ????? 8O

Un nom de domaine ne peut pas commencer ou finir par "-" donc la partie "^[^a-z0-9]" dit "tout ce qui ne commence pas par" et la partie "[^a-z0-9]$" dit "tout ce qui ne se termine pas par". Bref, ça détruit un caractère "-" qui serait au début et/ou à la fin... et la même chose pour le caractère ".".

thierry8 a dit:
Ca serait vraiment cool, si quelqu'un de calé dans les expressions régulières pouvait filler un coup de main ! ;)

oups, ce n'est pas réellement mon cas :(

tisha
 
WRInaute accro
Et bien : un grand grend merci !!!!!!!


Et tu t'en sort plutôt bien dans les expressions régulières ! ;)


C'est super sympa ! Merci, j'ai tout compris ! ;)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut