Formulaire + get + enlever accents

biguiz Messages postés 206 Statut Membre -  
 Laurent Delacre -
Bonjour à tous,
j'utilise un formulaire pour récupérer un mot pour mon moteur de recherche.
Tout marche niquel sauf quand le mot comporte un accent, ça ne m'affiche aucun enregistrement, alors que dans la base il contient bien un accent.

Connaitriez-vous une méthode pour envoyer mon mot en GET sans l'accent afin que ma requête fonctionne convenalblement ? Peut être avec du javascript ?

Merci par avance !
A voir également:

4 réponses

biguiz Messages postés 206 Statut Membre 35
 
function removeaccents($mot)
{
$mot= strtr($mot,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

return $mot;
} ;

$mots = explode(' ', $mot); //séparation des mots de la recherche à chaque espace
$nombre_mots = count ($mots); //compte le nombre de mots

$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++)
{
$valeur_requete .= 'AND (nom LIKE \'%' . $mots[$nombre_mots_boucle] . '%\' OR descriptif LIKE \'%' . $mots[$nombre_mots_boucle] . '%\' OR categorie LIKE \'%' . $mots[$nombre_mots_boucle] . '%\')'; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,'AND');

mysql_connect ($Hote, $Utilisateur, $Motdepasse);
$mot = addslashes($mot);
$Requete2 = "SELECT * from $Nomtable WHERE $valeur_requete";
$Resultat2 = mysql_db_query ($Nombase, $Requete2);

//comptage
$Nbe = mysql_num_rows($Resultat2);
1
Laurent Delacre
 
Le problème est que la fonction GET envoie les données tapées au clavier via l'URL à ton fichier PHP. Or il est interdit de mettre des accents dans un URL. La fonction GET utilise donc une table spéciale pour convertir tes accents en caractères de base. Chez moi, par exemple, mon serveur utilise l'utf8 (UNICODE), et la fonction get traduit le caractère "é" en "é".

Il est toutefois possible de faire reconvertir (dans l'autre sens) ton code PHP (à la réception de ces caractères bizarres donc) pour obtenir à nouveau les caractères accentués. Pour cela, tu dois utiliser la fonction PHP utf8_decode. Tu peux ensuite, si tu le souhaite, enregistrer ces données dans une base de données, à condition que celle-ci soit également configurée pour utiliser l'unicode...

Voici un exemple de codes html, puis php qui illustrent mes propos:

index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<FORM METHOD=GET ACTION="reception.php">
		nom: <INPUT NAME="nom"><BR>
		prénom: <INPUT NAME="prénom"><BR>
		<INPUT TYPE=SUBMIT>
	</FORM>
</body>
</html>


reception.php:

<?php
foreach($HTTP_GET_VARS as $clé=>$valeur){
	$clé = utf8_decode($clé);
	$valeur = utf8_decode($valeur);
	echo "$clé => $valeur<BR>\n";
}
?>
0
PeterPeterPeter Messages postés 202 Date d'inscription   Statut Membre Dernière intervention   30
 
http://www.01php.com/fiche-sources-26.html

Je n'ai pas testé mais ça a l'air de marcher.
0
biguiz Messages postés 206 Statut Membre 35
 
OK merci.
J'ai testé ce code mais je ne sais pas comment l'utiliser.
Faut que je mette cette fonction au niveau de la requête ?
Faut-il que je remplace le $string par une de mes variables ?
0
PeterPeterPeter Messages postés 202 Date d'inscription   Statut Membre Dernière intervention   30
 
Balance ton code jusqu'à maintenant voir à quoi il ressemble et où il faut placer le tout.

edit : c'est lors de la reception de ton GET avant qu'il ne soit traité tu dois le faire passer par la fonction.
0