Problème d'encodage

VaN
Mammouth du PHP | 1107 Messages

13 févr. 2009, 15:36

Bonjour,

Voici mon problème :

Sur une page, j'ai le lien suivant :

Code : Tout sélectionner

<a href="5-Qu est ce qu un prêts relais?.html">Qu est ce qu' un prêts relais?</a>
Il est en HTML, car je fais de l'URL Rewriting dessus.

Lorsque je clique dessus, le navigateur renvoie
The requested URL /dev/5-Qu est ce qu un prêts relais was not found on this server.
le charset du site est UTF-8 :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Mais le champs de la table SQL dont est tiré le nom de la page est en
latin1_swedish_ci
Au final, je voudrais réussir à supprimer tous les caractères accentués du lien.

Pour le moment, j'en suis à là :
function stripAccents($string){
	$pattern01 = array("/&aacute;/", "/&agrave;/", "/&acirc;/", "/&ccedil;/", "/&eacute;/", "/&egrave;/", "/&ecirc;/", "/&icirc;/", "/&iuml;/", "/&ocirc;/", "/&ucirc;/");
	$pattern02 = array("/á/", "/a/", "/â/", "/ç/", "/é/", "/è/", "/ê/", "/î/", "/i/", "/ô/", "/û/");
   $rep_pat = array("a", "a", "a", "c", "e", "e", "e", "i", "i", "o", "u");
   $string = preg_replace($pattern01, $rep_pat, $string);
   $string = preg_replace($pattern02, $rep_pat, $string);
	
	return $string;
}

$page_rewritted['page_title'] = stripslashes($page['page_title']);
$page_rewritted['page_title'] = str_replace("'", "", $page_rewritted['page_title']);
$page_rewritted['page_title'] = stripAccents(htmlspecialchars($page_rewritted['page_title']));
						
$link = $page['page_id']."-".$page_rewritted['page_title'].".html";
echo '<a href="'.$link.'">'.stripslashes($page['page_title']).'</a><br />';
Je suis assez pressé par le temps, et j'aimerai très vite corriger ce problème, même si la solution adoptée n'est pas la plus propre/la meilleure.

Comment puis-je régler rapidement ce problème ?

VaN
Mammouth du PHP | 1107 Messages

13 févr. 2009, 17:51

Je viens poster une solution, bien que je n'en sois vraiment pas fier..

J'ai modifié ma fonction stripAccents(), en ajoutant un nouveau pattern :
$pattern03 = array("/á/", "/à /", "/â/", "/ç/", "/é/", "/è/", "/ê/", "/î/", "/ï/", "/ô/", "/û/");
$string = preg_replace($pattern03, $rep_pat, $string);
qui correspond aux caractères accentués encodés en ANSI.

Il reste juste un petit problème, le caractère à n'est pas remplacé, car à n'a pas l'air d'être la bonne valeur.

Je ne suis vraiment pas fier de cette méthode, car j'ai bien conscience que c'est un pansement, et non une solution, mais je suis très pressé par le temps, donc je m'en contente pour le moment. Peut être cela servira t'il à d'autres dans la même position que moi..

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

13 févr. 2009, 18:29

Et les fonctions urlencode() et urldecode() elles ne peuvent t'être d'aucune utilité ?