Besoin d'aide avec preg_replace

Pitouli Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -  
Pitouli Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -
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. kkz_mil3k Messages postés 108 Statut Membre 13
     
    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
  2. kkz_mil3k Messages postés 108 Statut Membre 13
     
    <?
    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
  3. Pitouli Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   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
  4. Pitouli Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   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