Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

form et encodage ?

6 réponses
Avatar
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)

6 réponses

Avatar
SAM
Le 20/07/11 18:00, Une Bévue a écrit :

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 :
"ç"



??? tu m'étonnes ?
le ç est tapé dans un champ de texte ?
Ça passe par un serveur ?
ou en local ?

pourtant dans mon entête j'ai :
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">



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)

le js est :
alert(unescape(page[1]))
cela signifierait-il que le unescape n'est pas UTF-8 compatible ???



à 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
Avatar
unbewusst.sein
SAM wrote:

Le 20/07/11 18:00, Une Bévue a écrit :
>
> 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 :
> "ç"

??? tu m'étonnes ?
le ç est tapé dans un champ de texte ?
Ça passe par un serveur ?
ou en local ?



Par Apache 2, je n'ai plus le problème d'UTF-8...

> pourtant dans mon entête j'ai :
> <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

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)

> le js est :
> alert(unescape(page[1]))
> cela signifierait-il que le unescape n'est pas UTF-8 compatible ???

à 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); // ç --> ç



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...



<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();">


je ne connaissais pas le truc : onsubmit="return v();"
<p><input type=submit> <input></p>
</form>



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)
Avatar
SAM
Le 20/07/11 20:08, Une Bévue a écrit :
SAM wrote:

Le 20/07/11 18:00, Une Bévue a écrit :

j'ai une form :
<form method="get" action="form.html" accept-charset="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(){




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,' ');
}
}
}


je ne pige pas pourquoi avec decodeURI le "+" n'est pas décodé, ni le
"?" ce qui est pire...



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 ;-)

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



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)
<http://recherche.fr.selfhtml.org/cgi-bin/such.pl>
<http://fr.selfhtml.org/> est aux abonnés absents non ?

voir :
<https://developer.mozilla.org/fr/Guide_JavaScript_1.5/Fonctions_pr%C3%A9d%C3%A9finies/Les_fonctions_escape_et_unescape>
<https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/decodeURI>
<https://developer.mozilla.org/en/JavaScript/Reference/Global_Functions/decodeURIComponent>

<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();">


je ne connaissais pas le truc : onsubmit="return v();"



c'est le même principe que :

<a href="1.htm" onclick="return pop(this)">menu 1</a>

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.

<p><input type=submit> <input></p>
</form>



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" ,




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);


je sais qu'il faut avoir :
<option value="enseignant" selected="selected">Enseignant</option>



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;
}
}

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...



pas besoin d'encoder sans doute, mais ...
décoder ... vaut mieux le faire (ça ne mange pas de pain).

seul truc est que j'ai besoin de plusieurs "submit" par exemple :



Heu, pour les tests le + simple était le formulaire normal ... !
après ...

<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...



Ha! l'interface PHP progresse ? ;-)


--
Stéphane Moriaux avec/with iMac-intel
Avatar
unbewusst.sein
SAM wrote:

OK, merci pour tout !!!

Ha! l'interface PHP progresse ? ;-)



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)
Avatar
Olivier Miakinen
Le 21/07/2011 00:54, SAM répondait à la Bévue :

je ne pige pas pourquoi avec decodeURI le "+" n'est pas décodé, ni le
"?" ce qui est pire...



Olivier Niakimen



Oui, Stéphane Romiaux

t'en dirait plus mais il part en vacances.



Je ne suis pas encore parti.

Quant à en dire plus, voici ce que je trouve dans la norme :
<cit.>
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.
</cit.>

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.

(et on ne sait pas où !)



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.
Avatar
unbewusst.sein
Olivier Miakinen <om+ wrote:

Je ne suis pas encore parti.

Quant à en dire plus, voici ce que je trouve dans la norme :
<cit.>
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.
</cit.>

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.

> (et on ne sait pas où !)

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)