Besoin d'aide avec preg_replace

Bonjour !

J'ai une fonction de "nettoyage" qui me cause un petit souci :

function nettoyer($in) {
	$search = array ('@[áãàâäÂÄ]@i','@[éèêëÊË]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');	
	$replace = array ('a','e','i','u','o','n','y','c','_','');
	return preg_replace($search, $replace, $in);
}

Et si je fais ceci :

<?=nettoyer('àé')?>

Le problème est que, au lieu d'avoir "ae", j'ai "aaae".

?!

J'ai fais un petit test : j'ai changé l'ordre dans mes deux arrays de cette manière :

function nettoyer($in) {
	$search = array ('@[éèêëÊË]@i','@[áãàâäÂÄ]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');	
	$replace = array ('e','a','i','u','o','n','y','c','_','');
	return preg_replace($search, $replace, $in);
}

(le groupe des E est avant celui des A)

Et cette fois si, quand je fais

<?=nettoyer('àé')?>

J'obtiens "eaee" au lieu de "ae".

Il semblerait donc que la lettre du premier "groupe" de l'array se mete avant chacun des caractères nettoyés. Auriez vous une solution à ce petit problème ?

Merci beaucoup,

Pitouli

4 réponses

  1. salut,
    j'ai pas essayé ton code mais le probleme doit venir de là :

    ('@[éèêëÊË]@i','@[áãàâäÂÄ]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');

    pourquoi remplacer "" par quelquechose.
    ++

    j'essai ton code et ten dit plus.
    0
    1. <?
      function nettoyer($in) {
      $search = array ('@[áãàâäÂÄ]@i','@[éèêëÊË]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');
      $replace = array ('a','e','i','u','o','n','y','c','_','');
      return preg_replace($search, $replace, $in);
      }
      ?>

      <?=nettoyer('àéàâäÿ')?>

      résultat : aeaaay

      je viens de tester ça, ça marche, et cela est l'original de ton code.
      regarde autour de php

      ++
      Joris

      0
      1. Diantre, c'est à ni rien comprendre !

        Je te donne le code de la page entière :

        <?php require('contenu_php/param.php'); ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Pictii</title>
        <link href="/contenu_site/template/style.css" rel="stylesheet" type="text/css" />
        <?php require('contenu_site/js/js.php'); ?>
        </head>
        <body>
        <?php require('contenu_php/includes/include_menu.php'); ?>
        <div id="site">
        	<div id="titre"><p><img src="/contenu_site/template/images/trans.gif" width="300" height="80" alt="Pictii" class="image_titre" /></p></div>
        	<div id="header">
        		<div id="header_left"></div>
        		<div id="header_middle">
        			<div id="contenu_header">
        			</div>
        		</div>
        		<div id="header_right"></div>
        	</div>
        	<div id="corps">
        		<div id="contenu_corps">
                    <p><?=nettoyer('é')?></p>
        		</div>
        	</div>
        	<div id="footer">
        		<p>By Pitouli - valide <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a></p>
        	</div>
        </div>
        </body>
        </html>
        


        La fonction est dans le fichier param.php qui est inclus au début.

        Merci de t'intéresser à mon cas en tout cas !

        Pitouli
        0
        1. Hum, j'ai fait plus simple pour tester :

          <?php
          
          function nettoyer($in) {
          	$search = array ('@[áãàâäÂÄ]@i','@[éèêëÊË]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_.]@');	
          	$replace = array ('a','e','i','u','o','n','y','c','_','');
          	return preg_replace($search, $replace, $in);
          }
          
          
          echo nettoyer('éèààçàç');
          ?>

          Ben, ça marche pô : ça affiche "aeaeaaaaacaaac"

          Donc apparemment, ça viendrait du serveur ? Mais qu'est ce qui pourrait faire planter un si simple preg_replace ?

          Pitouli

          PS: encore merci de ton aide !
          0