[Résolu]Problèmes d'accents avec la méthode GET dans un formulaire

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.7.1
#~ Nom de l'hébergeur : infomaniak
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.7.1
#~ Installed Modules:
#~ * CMSMailer: 2.0
#~ * FileManager: 1.0.2
#~ * MenuManager: 1.6.3
#~ * ModuleManager: 1.3.3
#~ * News: 2.10.5
#~ * nuSOAP: 1.0.1
#~ * Printing: 1.0.4
#~ * Search: 1.6.3
#~ * ThemeManager: 1.1.1
#~ * TinyMCE: 2.7.0
#~ * FrontEndUsers: 1.8.2
#~ * CustomContent: 1.5.3
#~ * CGExtensions: 1.18.3
#~ * CGCalendar: 1.5.2
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * max_upload_size: 48000000
#~ * default_upload_permission: 664
#~ * assume_mod_rewrite: true
#~ * page_extension: /
#~ * internal_pretty_urls: false
#~ * use_hierarchy: true
#~ Php Information:
#~ * phpversion: 5.2.13
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * E_STRICT: 0
#~ * memory_limit: 128M
#~ * max_execution_time: 300
#~ * safe_mode: Off (Faux)
#~ * session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ * session_use_cookies: On (Vrai)
#~ Server Information:
#~ * Server Api: apache2handler
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.84
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,

j'avais discuté sur ce forum de la barre de recherche Google et Jean le Chauve m'avait bcp aidé :
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=2553

Mais je remarque maintenant que le formulaire modifie les caractères avec accents afin de les passer avec la méthode get :

<form action="./recherche" method="GET" accept-charset="UTF-8">
<input name="q" size="31" id="query-input" style="border: 1px solid rgb(126, 157, 185); padding: 2px;" onfocus="inputFocus();" onblur="inputBlur();" />
<input name="sa" value="Rechercher" type="submit" />
</form>

Typiquement, une recherche sur 'vélo' donne cette adresse:
http://www.coord21.ch/test_cmsms/recherc...Rechercher

La recherche porte alors sur v%C3%A9lo et se révèle infructueuse. Phénomène étrange, mon moteur de recherche en perd son nom pour s'appeler 'Custom Search Control', au lieu de 'Moteur de recherche Coord21'.

Par ailleurs, si j'utilise la barre google générée par la fontion Onload(), je n'ai pas de problème.

J'ai essayé de voir si c'était un problème d'encodage et si je pouvais reconvertir l'objet de la recherche en utf-8, mais ça n'a pas marché. Cela dit, il faut certainement modifier la fonction getQuery:

function getQuery() {
var url = '' + window.location;
var queryStart = url.indexOf('?') + 1;
if (queryStart > 0) {
var parts = url.substr(queryStart).split('&');
for (var i = 0; i < parts.length; i++) {
if (parts[i].substr(0, 1) == 'q') {
return unescape(parts[i].split('=')[1].replace(/\+/g, ' '));
}
}
}
return '';
}

Quelqu'un aurait une idée ?
#1
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.7.1
#~ Nom de l'hébergeur : infomaniak
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.7.1
#~ Installed Modules:
#~ * CMSMailer: 2.0
#~ * FileManager: 1.0.2
#~ * MenuManager: 1.6.3
#~ * ModuleManager: 1.3.3
#~ * News: 2.10.5
#~ * nuSOAP: 1.0.1
#~ * Printing: 1.0.4
#~ * Search: 1.6.3
#~ * ThemeManager: 1.1.1
#~ * TinyMCE: 2.7.0
#~ * FrontEndUsers: 1.8.2
#~ * CustomContent: 1.5.3
#~ * CGExtensions: 1.18.3
#~ * CGCalendar: 1.5.2
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * max_upload_size: 48000000
#~ * default_upload_permission: 664
#~ * assume_mod_rewrite: true
#~ * page_extension: /
#~ * internal_pretty_urls: false
#~ * use_hierarchy: true
#~ Php Information:
#~ * phpversion: 5.2.13
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * E_STRICT: 0
#~ * memory_limit: 128M
#~ * max_execution_time: 300
#~ * safe_mode: Off (Faux)
#~ * session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ * session_use_cookies: On (Vrai)
#~ Server Information:
#~ * Server Api: apache2handler
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.84
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,

j'avais discuté sur ce forum de la barre de recherche Google et Jean le Chauve m'avait bcp aidé :
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=2553

Mais je remarque maintenant que le formulaire modifie les caractères avec accents afin de les passer avec la méthode get :

<form action="./recherche" method="GET" accept-charset="UTF-8">
<input name="q" size="31" id="query-input" style="border: 1px solid rgb(126, 157, 185); padding: 2px;" onfocus="inputFocus();" onblur="inputBlur();" />
<input name="sa" value="Rechercher" type="submit" />
</form>

Typiquement, une recherche sur 'vélo' donne cette adresse:
http://www.coord21.ch/test_cmsms/recherc...Rechercher

La recherche porte alors sur v%C3%A9lo et se révèle infructueuse. Phénomène étrange, mon moteur de recherche en perd son nom pour s'appeler 'Custom Search Control', au lieu de 'Moteur de recherche Coord21'.

Par ailleurs, si j'utilise la barre google générée par la fontion Onload(), je n'ai pas de problème.

J'ai essayé de voir si c'était un problème d'encodage et si je pouvais reconvertir l'objet de la recherche en utf-8, mais ça n'a pas marché. Cela dit, il faut certainement modifier la fonction getQuery:

function getQuery() {
var url = '' + window.location;
var queryStart = url.indexOf('?') + 1;
if (queryStart > 0) {
var parts = url.substr(queryStart).split('&');
for (var i = 0; i < parts.length; i++) {
if (parts[i].substr(0, 1) == 'q') {
return unescape(parts[i].split('=')[1].replace(/\+/g, ' '));
}
}
}
return '';
}

Quelqu'un aurait une idée ?
#2
re,

Comme je ne comprends pas trop la demande, si la question se réfère à un module il faut poser la question dans le bon forum
Modules, Tags
Aide concernant l'utilisation des modules, balises et balises utilisateur
J-C Etiemble v 2.2.xx
#2
re,

Comme je ne comprends pas trop la demande, si la question se réfère à un module il faut poser la question dans le bon forum
Modules, Tags
Aide concernant l'utilisation des modules, balises et balises utilisateur
J-C Etiemble v 2.2.xx
#3
Non, c'est pas un module. Il s'agit de l'intégration d'un Custom Search Engine de Google, mais sans passer par un module... C'est pour ça que j'ai mis le sujet dans Général.

Je voulais savoir si je pouvais faire quelque chose pour que les accents ne soient pas modifiés au moment du changement de page (changer qqchose dans le formulaire) ou si je pouvais faire qqchose dans le Javascript pour remodifier l'objet de la recherche et enlever les caractères bizarres qui remplacent les lettres accentuées.
#3
Non, c'est pas un module. Il s'agit de l'intégration d'un Custom Search Engine de Google, mais sans passer par un module... C'est pour ça que j'ai mis le sujet dans Général.

Je voulais savoir si je pouvais faire quelque chose pour que les accents ne soient pas modifiés au moment du changement de page (changer qqchose dans le formulaire) ou si je pouvais faire qqchose dans le Javascript pour remodifier l'objet de la recherche et enlever les caractères bizarres qui remplacent les lettres accentuées.
#4
re,

Déjà alors préciser ce qu'est "Custom Search Engine de Google"
De plus si "la recherche personnalisée Google" est fournie par Google leur poser la question directement ici c'est CMCMS Wink
J-C Etiemble v 2.2.xx
#4
re,

Déjà alors préciser ce qu'est "Custom Search Engine de Google"
De plus si "la recherche personnalisée Google" est fournie par Google leur poser la question directement ici c'est CMCMS Wink
J-C Etiemble v 2.2.xx
#5
Ben, je postais ici parce qu'on avait déjà discuté du problème avec Jean le Chauve, que Bess semblait intéressé à garder une trace de la procédure et qu'il y a manifestement un problème avec...

De plus, le Custom Search Engin de Google fonctionne très bien, comme je l'ai dit. C'est quand mon propre formulaire va ouvrir la page de résultat de recherche en passant l'objet de la recherche en paramètre qu'il y a un problème d'encodage utf-8. Alors, c'est vrai que c'est pas directement lié à CMSMS, mais j'ai pas eu de meilleur idée que de poster ici.

Je vais chercher plus loin voir si je trouve mon bonheur, mais n'hésitez pas à me donner des infos !

PS: ce serait plus pratique si les sujets "résolus" n'étaient pas systématiquement fermé, je trouve.
#5
Ben, je postais ici parce qu'on avait déjà discuté du problème avec Jean le Chauve, que Bess semblait intéressé à garder une trace de la procédure et qu'il y a manifestement un problème avec...

De plus, le Custom Search Engin de Google fonctionne très bien, comme je l'ai dit. C'est quand mon propre formulaire va ouvrir la page de résultat de recherche en passant l'objet de la recherche en paramètre qu'il y a un problème d'encodage utf-8. Alors, c'est vrai que c'est pas directement lié à CMSMS, mais j'ai pas eu de meilleur idée que de poster ici.

Je vais chercher plus loin voir si je trouve mon bonheur, mais n'hésitez pas à me donner des infos !

PS: ce serait plus pratique si les sujets "résolus" n'étaient pas systématiquement fermé, je trouve.
#6
re,

>si les sujets "résolus" n'étaient pas systématiquement fermé
C'est normal qu'il soient fermés puisqu'il sont résolus Wink donc plus aucune question
De plus ton sujet de départ 'ref Google Custom Search'était posté dans Module
Pour réouverture d'un sujet "fermé" il faut poster le demande à Bess
J-C Etiemble v 2.2.xx
#6
re,

>si les sujets "résolus" n'étaient pas systématiquement fermé
C'est normal qu'il soient fermés puisqu'il sont résolus Wink donc plus aucune question
De plus ton sujet de départ 'ref Google Custom Search'était posté dans Module
Pour réouverture d'un sujet "fermé" il faut poster le demande à Bess
J-C Etiemble v 2.2.xx
#7
c'est moi qui les ferme Yvan !

et je les ferme par ce que vous les mettez en résolu Tongue (pour éviter les déterrages de topic inutile, crois mon expérience sur ce coup)

envoyez moi un mail avec l'url pour me prévenir si un topic doit être re-ouvert
#7
c'est moi qui les ferme Yvan !

et je les ferme par ce que vous les mettez en résolu Tongue (pour éviter les déterrages de topic inutile, crois mon expérience sur ce coup)

envoyez moi un mail avec l'url pour me prévenir si un topic doit être re-ouvert
#8
Je sais, mais on a parfois envie de rebondir sur un post après coup ou proposer une meilleure solution...

Mais je vais garder ce sujet, maintenant qu'il est là. Le truc, c'est qu'il doit bien y avoir un truc qui cloche en rapport avec CMSMS, parce que le code fonctionne parfaitement ici :
http://ajax-apis.appspot.com/two-page-search-alt
Et si je vais une recherche sur vélo, l'adresse générée ressemblera à ça:
http://ajax-apis.appspot.com/html/two_pa...=v%C3%A9lo
... Oui, alors ça c'est bizarre, parce que sur mon écran, 'vélo' est écrit tel quel et pas 'v%C3%A9lo'... Si je copie toute l'adresse et la colle, elle se terminera par 'v%C3%A9lo', autrement elle se terminera par 'vélo' ! J'y comprends rien.
#8
Je sais, mais on a parfois envie de rebondir sur un post après coup ou proposer une meilleure solution...

Mais je vais garder ce sujet, maintenant qu'il est là. Le truc, c'est qu'il doit bien y avoir un truc qui cloche en rapport avec CMSMS, parce que le code fonctionne parfaitement ici :
http://ajax-apis.appspot.com/two-page-search-alt
Et si je vais une recherche sur vélo, l'adresse générée ressemblera à ça:
http://ajax-apis.appspot.com/html/two_pa...=v%C3%A9lo
... Oui, alors ça c'est bizarre, parce que sur mon écran, 'vélo' est écrit tel quel et pas 'v%C3%A9lo'... Si je copie toute l'adresse et la colle, elle se terminera par 'v%C3%A9lo', autrement elle se terminera par 'vélo' ! J'y comprends rien.
#9
J'ai comparé mon formulaire avec celui du module Search, mais je n'ai pas vu de différence majeure et pourtant il fonctionne correctement.

Non, franchement, je vois pas. Si quelqu'un a une intuition, elle est plus que bienvenue !

EDIT: j'avais pas vu ton message, Bess. Bien sûr, je fais confiance à ton expérience... Mais à ce propos, tu n'aurais pas une idée pourquoi les accents sont mal gérés à l'envoi du formulaire ?
#9
J'ai comparé mon formulaire avec celui du module Search, mais je n'ai pas vu de différence majeure et pourtant il fonctionne correctement.

Non, franchement, je vois pas. Si quelqu'un a une intuition, elle est plus que bienvenue !

EDIT: j'avais pas vu ton message, Bess. Bien sûr, je fais confiance à ton expérience... Mais à ce propos, tu n'aurais pas une idée pourquoi les accents sont mal gérés à l'envoi du formulaire ?
#10
dsl, rien du tout de mon côté

teste avec des traces afin de suivre l'évolution du contenu de ta variable, tu trouveras à quel endroit c'est modifié
#10
dsl, rien du tout de mon côté

teste avec des traces afin de suivre l'évolution du contenu de ta variable, tu trouveras à quel endroit c'est modifié
#11
Je m'excuse, mais je ne vois pas de quoi tu parles. Je ne connais pas les 'traces'. Par contre, je sais que l'objet de ma recherche est modifié au moment de l'envoi du formulaire, puisqu'il apparaît modifié dans l'adresse appelée...
#11
Je m'excuse, mais je ne vois pas de quoi tu parles. Je ne connais pas les 'traces'. Par contre, je sais que l'objet de ma recherche est modifié au moment de l'envoi du formulaire, puisqu'il apparaît modifié dans l'adresse appelée...
#12
je parles de traces lorsque qu'on dispose dans le code des "echo $mavariable;" afin de suivre le déroulement du process.

ca permet de savoir à quel moment ca déconne. Toi en l'occurrence tu le sais si j'en crois ton dernier message... donc laisse tomber.

je pense à ta fonction

Code :
function getQuery() {
        var url = '' + window.location;
        var queryStart = url.indexOf('?') + 1;
        if (queryStart > 0) {
          var parts = url.substr(queryStart).split('&');
          for (var i = 0; i < parts.length; i++) {
            if (parts[i].substr(0, 1) == 'q') {
              return unescape(parts[i].split('=')[1].replace(/\+/g, ' '));
            }
          }
        }
        return '';
      }
si tu as unescape ici, tu doit avoir un escape ailleurs dans le code de ton formulaire non ? http://www.w3schools.com/jsref/jsref_escape.asp
#12
je parles de traces lorsque qu'on dispose dans le code des "echo $mavariable;" afin de suivre le déroulement du process.

ca permet de savoir à quel moment ca déconne. Toi en l'occurrence tu le sais si j'en crois ton dernier message... donc laisse tomber.

je pense à ta fonction

Code :
function getQuery() {
        var url = '' + window.location;
        var queryStart = url.indexOf('?') + 1;
        if (queryStart > 0) {
          var parts = url.substr(queryStart).split('&');
          for (var i = 0; i < parts.length; i++) {
            if (parts[i].substr(0, 1) == 'q') {
              return unescape(parts[i].split('=')[1].replace(/\+/g, ' '));
            }
          }
        }
        return '';
      }
si tu as unescape ici, tu doit avoir un escape ailleurs dans le code de ton formulaire non ? http://www.w3schools.com/jsref/jsref_escape.asp
#13
Non... La seule chose que je n'ai pas montré c'est les fonctions inputFocus et inputBlur, qui ne sont a priori pas concernées par le problème:

{literal}
<script type="text/javascript">

function inputFocus() {
document.getElementById('query-input').style['background'] = '';
}

function inputBlur() {
var queryInput = document.getElementById('query-input');
if (!queryInput.value) {
queryInput.style['background'] = 'white url(http://www.google.com/coop/images/google...ermark.gif) no-repeat 0% 50%';
}
}
</script>
{/literal}

C'est intéressant cette piste de unescape... Si je l'enlève, une recherche sur vélo fait en fait une recherche sur v%25C3%25A9lo (à la place de v%C3%A9lo). Donc c'est nécessaire, mais pas suffisant.

Pour ce qui est de faire un escape dans le formulaire, j'avoue que je vois pas où je le ferais. Et je ne comprendrais pas non plus pourquoi c'est nécessaire, alors qu'ailleurs, ça ne l'est pas...
#13
Non... La seule chose que je n'ai pas montré c'est les fonctions inputFocus et inputBlur, qui ne sont a priori pas concernées par le problème:

{literal}
<script type="text/javascript">

function inputFocus() {
document.getElementById('query-input').style['background'] = '';
}

function inputBlur() {
var queryInput = document.getElementById('query-input');
if (!queryInput.value) {
queryInput.style['background'] = 'white url(http://www.google.com/coop/images/google...ermark.gif) no-repeat 0% 50%';
}
}
</script>
{/literal}

C'est intéressant cette piste de unescape... Si je l'enlève, une recherche sur vélo fait en fait une recherche sur v%25C3%25A9lo (à la place de v%C3%A9lo). Donc c'est nécessaire, mais pas suffisant.

Pour ce qui est de faire un escape dans le formulaire, j'avoue que je vois pas où je le ferais. Et je ne comprendrais pas non plus pourquoi c'est nécessaire, alors qu'ailleurs, ça ne l'est pas...
#14
On me dit qu'il faudrait peut-être que je convertisse les fichiers de CMSMS qui sont en ANSI en UTF-8 et mettre également de default charset de mon serveur à utf-8 (ou utiliser le .htaccess si j'ai pas envie de basculer tout le site)...

Mais ça risque de poser des problèmes, non ? ça me semble également un peu bizarre de devoir tout changer alors que le module Search fonctionne...
#14
On me dit qu'il faudrait peut-être que je convertisse les fichiers de CMSMS qui sont en ANSI en UTF-8 et mettre également de default charset de mon serveur à utf-8 (ou utiliser le .htaccess si j'ai pas envie de basculer tout le site)...

Mais ça risque de poser des problèmes, non ? ça me semble également un peu bizarre de devoir tout changer alors que le module Search fonctionne...
#15
ca va être très problématique...

plus simplement il n'y aurait pas moyen de virer tous les accents afin de remplacer "vélo" par "velo" ?

tu fais ça au clic sur le bouton et c'est partit non ?
#15
ca va être très problématique...

plus simplement il n'y aurait pas moyen de virer tous les accents afin de remplacer "vélo" par "velo" ?

tu fais ça au clic sur le bouton et c'est partit non ?
#16
Merci d'avoir donné le lien sur unescape, ça m'a donné fait trouver la solution !

Ils disent que pour les url, il faut utiliser decodeURI... ça suffisait pas, mais par contre
return decodeURI(unescape(parts[i].split('=')[1].replace(/\+/g, ' ')));
... me donne ce que je veux !

Ouf, je me suis cru mourir ! Merci pour tes idées, en tout cas !
#16
Merci d'avoir donné le lien sur unescape, ça m'a donné fait trouver la solution !

Ils disent que pour les url, il faut utiliser decodeURI... ça suffisait pas, mais par contre
return decodeURI(unescape(parts[i].split('=')[1].replace(/\+/g, ' ')));
... me donne ce que je veux !

Ouf, je me suis cru mourir ! Merci pour tes idées, en tout cas !


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)