Bonjour à tous,
J'ai un petit soucis au niveau des formulaires, tout d'abord le code de la page :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <?php
header ( 'content-type: text/html; charset=utf-8' ) ;
ob_start ( 'ob_gzhandler' ) ;
echo '<?xml version="1.0" encoding="utf-8"?>' ;
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' ;
echo '<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">' ;
echo '<head>' ;
echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />' ;
echo '<title>TEST</title>' ;
echo '</head>' ;
echo '<body>' ;
echo '<form method="POST" action="./test.php">' ;
echo '<input type="text" name="q" value="' ;
isset ( $_REQUEST [ 'q' ] ) ? $q = $_REQUEST [ 'q' ] : $q = NULL ;
echo $q ;
echo '" />' ;
echo '<input type="submit" value="Submit" />' ;
echo '</form>' ;
echo '<br />' ;
echo '<form method="GET" action="./test.php">' ;
echo '<input type="text" name="q" value="' ;
isset ( $_REQUEST [ 'q' ] ) ? $q = $_REQUEST [ 'q' ] : $q = NULL ;
echo $q ;
echo '" />' ;
echo '<input type="submit" value="Submit" />' ;
echo '</form>' ;
echo '<br />' ;
if ( isset ( $_REQUEST [ 'q' ] ) )
{
echo $_REQUEST [ 'q' ] ;
}
echo '</body>' ;
echo '</html>' ;
ob_end_flush ( ) ;
?> |
Naviguateur : Firefox dernière version
La valeur entrée est : napoléon est mort
Pour le premier formulaire (méthode POST), aucun problème :
- l'adresse URL reste la même
- la valeur est récupérée dans les formulaires en UTF-8
- la valeur est affichée en UTF-8
Pour le second formulaire (méthode GET), aucun problème :
- l'adresse URL devient :
/test.php?q=napoléon+est+mort
- la valeur est récupérée dans les formulaires en UTF-8
- la valeur est affichée en UTF-8
Maintenant si j'entre directement dans la barre d'adresse :
/test.php?q=napoléon est mort
ou
/test.php?q=napoléon+est+mort
- l'adresse URL devient :
/test.php?q=napol%E9on%20est%20mort
ou
/test.php?q=napol%E9on+est+mort
- la valeur récupérée dans le formulaire et celle affichée donnent :
Une erreur 406 suivie d'une erreur 404 sur Linux (serveur LAMP) et la lettre "é" de vient "?" sur Windows (serveur WAMP)
Pour Windows, je pourrais à la rigeur utiliser la fonction utf8_encode pour la partie affichage uniquement.
Si je fais de même pour la valeur récupérée dans le formulaire et que je le resoumet alors "é" deviendra cette fois "é"
Pour Linux je sèche complet, quelque soit la solution j'ai toujours la même erreur.
La seule solution restante est donc de trouver comment garder "napoléon est mort" ou "napoléon+est+mort" dans l'adresse URL (sans soumission par le formulaire)
Si vous avez la solution, je suis preneur parce que là je pêche !!!
D'ailleur j'ai fais le test sur les 3 grands moteurs de recherche et Live Search (version internationale) émet aussi une erreur alors que la version française ne la fait pas...
Pour Google, la requête reste la même que celle d'origine dans la barre d'adresse.
Pour Yahoo, la requête est modifiée en RFC 1738 (si je me souviens bien !) mais fonctionne tout de même et affiche des résultats.
Voilà, please help !!!
Merci @ tous !
Partager