form et encodage ?
Le
unbewusst.sein

j'ai une form :
<form method="get" action="form.html" accept-charset="UTF-8">
et si je regarde ce que ça me donne avec un "ç" par exemple, c'est pas
bon :
"ç"
pourtant dans mon entête j'ai :
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
le js est :
alert(unescape(page[1]))
cela signifierait-il que le unescape n'est pas UTF-8 compatible ???
--
« La meilleure façon de prédire l'avenir, c'est de le créer. »
(Peter Drucker)
<form method="get" action="form.html" accept-charset="UTF-8">
et si je regarde ce que ça me donne avec un "ç" par exemple, c'est pas
bon :
"ç"
pourtant dans mon entête j'ai :
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
le js est :
alert(unescape(page[1]))
cela signifierait-il que le unescape n'est pas UTF-8 compatible ???
--
« La meilleure façon de prédire l'avenir, c'est de le créer. »
(Peter Drucker)
??? tu m'étonnes ?
le ç est tapé dans un champ de texte ?
Ça passe par un serveur ?
ou en local ?
si ça passe par un serveur, ce qui compte c'est l'en-tête du serveur.
(le meta n'est qu'une béquille ignorée si contre-ordre du serveur)
à mon idée ce n'est pas unescape mais escape, non ?
test en local :
==============
alert(unescape('ç')); // ç --> ç
alert(encodeURI(form[1].value)); // ç --> %C3%A7
alert(escape(form[1].value)); // ç --> %E7
alert(form[1].value); // ç --> ç
<script type="text/javascript" charset="utf-8">
function v() {
var form = document.forms[0];
alert('encodeURI = '+encodeURI(form[1].value));
alert('escape = '+escape(form[1].value));
alert('unescape = '+unescape(form[1].value));
alert('normal = '+form[1].value);
return false;
}
</script>
<form action="#" onsubmit="return v();">
<p><input type=submit> <input></p>
</form>
--
Stéphane Moriaux avec/with iMac-intel
Par Apache 2, je n'ai plus le problème d'UTF-8...
je passe les champs de la form par URL (type='get') de la forme :
http://82.226.217.239/landp/form.html?nom=Thoraval&prenom=Yvon&fonction enseignant&infos=Ici+o%C3%B9+l%C3%A0+%3F
infos="Ici où là ?"
donc les blancs sont remplacés par des "+" et le "?" par "3F".
ce que je fais :
window.onload = function(){
document.getElementById("url").innerHTML="Donne URL de la forme
: "+location.href;
var form=new Array();
page=location.href.split('form.html?');
if(page.length==2){
fields=page[1].split('&');
var l=fields.length;
for(var i=0; i<l; i++){
values=fields[i].split('=');
form[values[0]]ÞcodeURI(values[1]);
var d=document.getElementById(values[0]);
if(d){
if(values[0]=='infos'){
d.innerHTML=form[values[0]].split('+').join(' ');
} else{
d.value=form[values[0]];
}
}
}
}
};
je ne pige pas pourquoi avec decodeURI le "+" n'est pas décodé, ni le
"?" ce qui est pire...
en fait, comme ça marche bien en UTF-8, je cherche la fonction js
"builtin" qui décode :
Ici+o%C3%B9+l%C3%A0+%3F
en :
Ici où là ?
notes bien que le "où", au lieu de "ou", n'est là que pour tester les
accents...
je ne connaissais pas le truc : onsubmit="return v();"
j'ai un select :
<select name="fonction">
<option value="enseignant">Enseignant</option>
<option value="etudiant">Etudiant</option>
<option value="ingenieur">Ingénieur</option>
<option value="retraite">Retraité</option>
<option value="autre">Autre</option>
</select>
comment fait-on pour sélectionner la valeur retournée, par exemple si
j'ai fonction="enseignant" ,
je sais qu'il faut avoir :
<option value="enseignant" selected="selected">Enseignant</option>
je suis supposé être en HTML5...
dois-je mettre des IDs à chaque option :
<option id="enseignant" value="enseignant">Enseignant</option>
???
bon, en fait, toi, si j'ai bien compris ton exemple, tu me conseilles,
de lire la form, plutôt que passer par l'URL, auquel cas pas besoin de
décoder ou d'encoder...
seul truc est que j'ai besoin de plusieurs "submit" par exemple :
<input type='submit' name='calcul' value='Search' /><input type='submit'
name='calcul' value='Edit' /><input type='submit' name='calcul'
value='Save' />
suivant que la personne clique sur 'Search', 'Edit' ou 'Save', je fais
des choses différentes...
en fait j'ai une base de données "Web SQL", et la forme me sert (enfin
servira) soit à modifier une donnée soit à en ajouter une autre, pour
faire court...
--
« La meilleure façon de prédire l'avenir, c'est de le créer. »
(Peter Drucker)
window.onload = function() {
var pages = self.location.href.split('?')[1].split('&'),
n = pages.length;
if(n && n>0) {
while (n--) {
var c = pages[n].split('=');
alert(c[0] + ' = ' + decodeURIComponent(c[1]).replace(/+/g,' '));
document.getElementsByName(c[0])[0].value = decodeURIComponent(c[1])
.replace(/+/g,' ');
}
}
}
Olivier Niakimen t'en dirait plus mais il part en vacances.
(et on ne sait pas où !)
- decodeURI ne sait décoder que ce qu'il a d'abord encodeURI
- escape et unescape sont pour l'ISO-latin-1
- decodeURIComponent sera sans doute ton sauveur ;-)
alert(decodeURIComponent('Ici+o%C3%B9+l%C3%A0+%3F').replace(/+/g,' '));
Sinon, en ISO-Latin :
Ici%20o%F9%20l%E0%20%3F
ou :
Ici o%F9 l%E0 %3F
<http://stephane.moriaux.pagesperso-orange.fr/truc/test.htm?message=Ici
o%F9 l%E0 %3F>
selfHtml a changé son moteur de recherche on dirait
(et on ne trouve + rien)
voir :
c'est le même principe que :
JS:
function pop(quoi) {
window.open(quoi.href,'','width00,height00');
return false;
}
Si le JS est activé ça devrait ouvrir le lien dans un popup (ou onglet).
Le return false en fin de fonction va stopper le lien html lui-même.
Normalement, pour obtenir ce qui était sélectionné, depuis ce siècle il
suffit de faire :
alert(document.forms[0].fonction.value);
ou, si le navigateur le supporte :
alert(document.getElementsByName('fonction')[0].value);
au siècle dernier il était prudent de faire :
var s = document.forms[0].fonction;
// ou var s = document.forms[0].elements['fonction'];
alert(s.options[s.selectedIndex].value);
pour faire tourner le menu déroulant :
document.forms[0].fonction.selectedIndex = 2; // Ingénieur, hop!
donc inventer un truc ?
if(document.forms[0].elements[1] &&
document.forms[0].elements[1].tagName.toLowerCase=='select') {
var s = document.forms[0].elements[1], n = s.length;
while(n--) if(s[n].value == 'Enseignant') {
s.selectedIndex = n;
break;
}
}
pas besoin d'encoder sans doute, mais ...
décoder ... vaut mieux le faire (ça ne mange pas de pain).
Heu, pour les tests le + simple était le formulaire normal ... !
après ...
Ha! l'interface PHP progresse ? ;-)
--
Stéphane Moriaux avec/with iMac-intel
OK, merci pour tout !!!
Non, pas du tout, il y a eu même, hier soir, une chtite régression suite
à l'install de Lion.
En fait j'ai deux versions, l'une en php, l'autre en js.
je trouve le js plus souple que le php.
je crois bien que je ne me servirai du php que pour enregistrer/lire un
fichier pour le filer/prendre à/de JS...
--
« La meilleure façon de prédire l'avenir, c'est de le créer. »
(Peter Drucker)
Oui, Stéphane Romiaux
Je ne suis pas encore parti.
Quant à en dire plus, voici ce que je trouve dans la norme :
The encodeURI and decodeURI functions are intended to work with complete
URIs; they assume that any reserved characters in the URI are intended
to have special meaning and so are not encoded. The encodeURIComponent
and decodeURIComponent functions are intended to work with the
individual component parts of a URI; they assume that any reserved
characters represent text and so must be encoded so that they are not
interpreted as reserved characters when the component is part of a
complete URI.
Traduction approximative : les fonctions encodeURI et decodeURI sont
censées s'appliquer à des URI complètes, elles supposent que tous les
caractères spéciaux sont censés avoir leur signification spéciale, et
ils ne sont pas encodés. Alors que les fonctions encodeURIComponet et
decodeURIComponent sont censées s'appliquer à des sous-parties de l'URI,
dont les caractères spéciaux doivent être encodés puisqu'ils n'ont pas
leur signification spéciale.
Pour ceux que ça intéresse, deux semaines en Lozère, une semaine près de
Montpellier et une semaine dans les Landes, à priori sans ordinateur ni
liaison Internet.
Ah oui, c'est "logique" et ce que j'avais intuité...
--
« Qui prête à rire, n'est pas sûr d'être remboursé. »
(Raymond Devos)