Encodage utf8 / iso 8859-1

WRInaute passionné
Bonjour,

j'ai un souci d'encodage qq part et je trouve pas le problème.

Sur http://www.info-maison-de-retraite.fr/maison-retraite,dp1-07,ardeche.html, les liens de navigation en bas affichent ardnyche au lieu de ardeche
- Tous mes fichiers sont encodés en utf8
- La BD est en iso8859-1
- Chaque query est précédée d'un "SET NAMES 'utf8'"
- L'affichage d'Ardèche dans la page est OK avec l'accent
- la pagination est appelée par ce script (super au passage) auquel a été rajouté ce script :
Code:
unction rename_string($var,$sep='-') {
	$var = strip_tags($var);
	$var = trim(strtolower($var));
	$var = strtr($var, "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ", "aaaaaaooooooeeeeciiiiuuuuyn");
	$var = eregi_replace("'", " ", $var);
	$var = eregi_replace("/", " ", $var);
	
	$var1 = '';
	for($i=0;$i<=strlen($var)-1;$i++) {
	$tmp = $var{$i};
	if( eregi('[a-z]', $tmp) or eregi('[0-9]', $tmp) )
		$var1 .= $tmp;
	elseif( $tmp == ' ' or $tmp == $sep )
		$var1 .= $sep;
	}
	
	$imp = array();
	foreach( explode($sep, $var1) as $e ) {
		if( !empty($e) )
			$imp[] = $e;
		} 
	
	return implode($sep, $imp);
}

Malgré ça, je bloque !

Merci de votre aide
 
WRInaute accro
Ce ne serait pas ton strtr le problème? C'est explicitement du single-byte, donc si ton source et/ou ta variable à examiner sont en UTF-8, ça va mal se finir... Et il n'y a pas de version multi-byte, donc tu ne peux t'en servir que sur du single-byte (ISO-8859-*, quoi).

De façon générale, le strtr c'est à mon avis pas la meilleure solution. Si tu as un php >= 5.3.0, tu peux tenter:
Code:
preg_replace('\pM','',normalizer_normalize($string, Normalizer::FORM_D))

Jacques.
 
WRInaute impliqué
Faudrait penser à mettre à jour tes bookmarks, ca fait 2 ans que -seebz.be est devenu -seebz.net :mrgreen:

Bon sinon, peut-être que cette fonction pourrait t’intéresser (à n'appliquer que sur le nom de région sinon tes virgules vont aussi sauter)
 
WRInaute accro
Dans ce cas, si tu veux utiliser strtr il faut que la chaîne à manipuler ET ton code source soient en iso-8859.

Alternative: preg_replace avec des arrays de part et d'autre, genre:
Code:
preg_replace(array('à','ã','é','è'),array('a','a','e','e'),$var)
(à compléter)

Autre option: htmlentities puis preg_replace pour virer les accents, voir par exemple http://uk.php.net/manual/en/function.preg-replace.php#90485

Jacques.
 
WRInaute impliqué
rudddy a dit:
:mrgreen: comme quoi je suis pas un nouvel admirateur ^^
C'est vrai, et c'est pas la première fois que tu recommandes un de mes travaux il me semble (p'tit merci pour la cause :D )


rudddy a dit:
j'ai un dilemme : à qui je mets la reco ? :?: :?:
J'ai jamais compris l'intérêt donc je passe... et je préfère dix fois une recommandation du genre "super script au passage" :mrgreen:
 
Discussions similaires
Haut