Besoin d'aide avec preg_replace

Pitouli Messages postés 62 Statut Membre -  
Pitouli Messages postés 62 Statut Membre -
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

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
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
Pitouli Messages postés 62 Statut Membre 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
Pitouli Messages postés 62 Statut Membre 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