OVH Cloud OVH Cloud

id et caractère "/"

29 réponses
Avatar
unbewusst.sein
j'ai vu qu'un auteur utilisait comme id d'une élément, le path d'y
celui.

donc, contenant, a minima, des "/".

c'est orthodoxe ça ???

--
Une Bévue

9 réponses

1 2 3
Avatar
unbewusst.sein
Vincent Lefevre <vincent+ wrote:

> pas grave, il doit-être particuliérement rare d'avoir un site qui
> fonctionne sur plusieurs systèmes de fichiers non ?

Mais l'édition d'un fichier peut modifier l'inode. Et les inodes
changent en cas de récupération des données via un backup.



oui, merci, j'ai appris ça, entre-temps, j'ai donc abandonné inode...


> > Peut-être qu'il faudra que tu codes quelque chose d'équivalent à
> > base64, mais adapté aux ID.

> ben il faut un codage unique rapide implémentable facilement en JS et en
> PHP, voire en ruby.
> comme, pour les noms de fichiers, la tendance est à l'utf-8, voire
> utf-16,

Ça n'a pas de sens. Un id est une suite de caractères, alors que de
l'UTF-8 est une suite d'octets et l'UTF-16 est une suite de mots de
16 bits.




c'est pourquoi la solution proposée conjointement par "Mickaël Wolff aka
Lupus Michaelis" et "Olivier Miakinen" est la base :
utiliser un base64 modifié qui me semble bien marcher, voir mon essai en
php :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/map/base64.php
ou js :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/map/base64.html

> notes que l'auteur original de "AJAX_File_Browser" ne s'est pas cassé
> les pieds il a mis carément le path comme id sans-même encoder les
> "/"...
> et sur mac os x ça roule, mais il y a qq petits bugs dans ces scripts.
> <http://gscripts.net/free-php-scripts/Listing_Script/AJAX_File_Browser/d
> etails.html>

Pas standard. Et même sans parler d'id, certains caractères de contrôle
(qui peuvent se trouver dans les noms de fichiers) sont incompatibles
avec XML.



oui, je sais, il ne s'est pas emm@&dé, il a mis carément le path comme
ID...

ceci dit suite à échanges avec stef, je vais regarder une solution sans
besoin d'ID, le "dossier" à remplir par XHR étant défini par this...

--
Une Bévue
Avatar
unbewusst.sein
Olivier Miakinen <om+ wrote:


D'accord. Ça ne pose pas de problème, il suffit d'utiliser le « . » à la
place du « : » pour remplacer le « / » de Base64.



ouais, ok, je modifierai ça...
si je ne peux pas remplacer mes IDs par this...
--
Une Bévue
Avatar
Vincent Lefevre
Dans l'article <484f0d92$,
Olivier Miakinen <om+ écrit:

Le 11/06/2008 01:05, Vincent Lefevre a écrit :
>
> Mieux vaut faire un codage adapté sans passer par base64.

Pourquoi cela ?



Pour avoir un code qui prend moins de place en moyenne.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
unbewusst.sein
Vincent Lefevre <vincent+ wrote:


Pour avoir un code qui prend moins de place en moyenne.



ben j'ai regardé les implémentations base64 en C et en JS, côté JS, ça
évite (ie. en implémentant un code spécifique) une ligne de trois appels
à String#replace(...) :
Base64.encode(path).replace(/+/g,'-').replace(///g,':').replace(/=/g,
'_');

côté php, comme base64_encode/decode sont standards, il faut ré-écrire
tout le code (de l'ordre de 80 lignes).

pas sûr que ça prenne poins de place, in fine.
--
Une Bévue
Avatar
Vincent Lefevre
Dans l'article <1iidfek.pfidhqn2cnx3N%,
Une Bévue écrit:

Vincent Lefevre <vincent+ wrote:

> Pour avoir un code qui prend moins de place en moyenne.

ben j'ai regardé les implémentations base64 en C et en JS, côté JS, ça
évite (ie. en implémentant un code spécifique) une ligne de trois appels
à String#replace(...) :
Base64.encode(path).replace(/+/g,'-').replace(///g,':').replace(/=/g,
'_');



Par "code", j'entendais la chaîne encodée. J'ai vu une suggestion de
remplacer un caractère par 2 caractères (parce qu'il n'y avait pas
assez de caractères de disponibles?), ce qui est une mauvaise idée.

Et rappel: le ":" ne doit pas se trouver dans un id si les namespaces
sont utilisées.

Maintenant, il semble que ID, qui doit matcher Name, peut contenir
beaucoup de choses, en particulier toutes les suites de "Letter",
avec:

[84] Letter ::= BaseChar | Ideographic
[85] BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] |
[#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] |
[#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] |
[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] |
[#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] |
[#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C |
[#x038E-#x03A1] | [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA |
#x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | [#x0401-#x040C] |
[#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] |
[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] |
[#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] |
[#x0531-#x0556] | #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] |
[#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A] |
[#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] |
[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] |
#x093D | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] |
[#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] |
[#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] |
[#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] |
[#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] |
[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] |
[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] |
[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD |
#x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] |
[#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D |
[#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] |
[#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C |
[#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] |
[#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] |
[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] |
[#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] |
[#x0C8E-#x0C90] | [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] |
[#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] |
[#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] |
[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] |
[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] |
#x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] |
[#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] |
[#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD |
[#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] |
[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] |
[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] |
#x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 |
[#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 |
#x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 |
#x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] |
#x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 |
[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] |
[#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] |
[#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] |
[#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] |
[#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] |
[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 |
[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] |
[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]
[86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
Olivier Miakinen
Le 11/06/2008 18:51, Vincent Lefevre a écrit :

Par "code", j'entendais la chaîne encodée. J'ai vu une suggestion de
remplacer un caractère par 2 caractères (parce qu'il n'y avait pas
assez de caractères de disponibles?), ce qui est une mauvaise idée.



C'était une boutade, parce qu'en fait il y a assez de caractères de
disponibles, et je ne comprenais pas pourquoi Une Bévue semblait revenir
sur l'ancienne idée selon laquelle ce n'aurait pas été le cas.

Par ailleurs, les caractères que je proposais de redoubler sont
rarissimes lors de l'encodage en base64 de noms de fichiers. Mais
bon, dans l'absolu tu as raison.

Et rappel: le ":" ne doit pas se trouver dans un id si les namespaces
sont utilisées.



D'accord. Le nombre de caractères autorisés reste donc au nombre de 65
au lieu de 66, ce qui suffit amplement pour un encodage type Base64,
même en conservant le caractère de padding dont on pourrait très bien
se passer.

Maintenant, il semble que ID, qui doit matcher Name, peut contenir
beaucoup de choses, en particulier toutes les suites de "Letter",
avec:

[84] Letter ::= BaseChar | Ideographic
[85] BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] |
[#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] |
[ ... ]
[86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]



Je n'en ai pas l'impression, du moins pas en HTML (ni, donc, en
XHTML 1.0) :

<http://www.la-grange.net/w3c/html4.01/types.html#type-name>
les atomes ID et NAME doivent commencer par une lettre ([A-Za-z]), qui
peut être suivie par un nombre quelconque de lettres, de chiffres
([0-9]), de caractères trait d'union « - », souligné « _ », deux-points
« : » et points « . ».
</>

<http://www.w3.org/TR/html4/types.html#type-name>
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens ("-"),
underscores ("_"), colons (":"), and periods (".").
</>
Avatar
unbewusst.sein
Olivier Miakinen <om+ wrote:


C'était une boutade, parce qu'en fait il y a assez de caractères de
disponibles, et je ne comprenais pas pourquoi Une Bévue semblait revenir
sur l'ancienne idée selon laquelle ce n'aurait pas été le cas.



ah bon, j'ai écris ça ?
j'ai pensé, un moment, ne pas avoir à utiliser d'ID, et donc d'encodage,
en utilisant « this » mais, après vérification, ce n'est pas possible.

j'utilise b64 modifié dernière version (avec . au lieu de :)
--
Une Bévue
Avatar
unbewusst.sein
Vincent Lefevre <vincent+ wrote:


Par "code", j'entendais la chaîne encodée. J'ai vu une suggestion de
remplacer un caractère par 2 caractères (parce qu'il n'y avait pas
assez de caractères de disponibles?), ce qui est une mauvaise idée.

Et rappel: le ":" ne doit pas se trouver dans un id si les namespaces
sont utilisées.



ce qui est mon cas. j'ai tenu compte de cette remarque (ie concernant :
et namespace) même si c'est un bug, amha.
je n'ai jamais eu l'intention de remplacer un caractère par 2
caractères.
--
Une Bévue
Avatar
Vincent Lefevre
Dans l'article ,
Olivier Miakinen <om+ écrit:

> Maintenant, il semble que ID, qui doit matcher Name, peut contenir
> beaucoup de choses, en particulier toutes les suites de "Letter",
> avec:
>
> [84] Letter ::= BaseChar | Ideographic
> [85] BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] |
> [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] |
> [ ... ]
> [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]

Je n'en ai pas l'impression, du moins pas en HTML



Ah, je considérais XHTML.

(ni, donc, en XHTML 1.0) :



Si, c'est autorisé, mais déconseillé si on veut être compatible avec
les parseurs HTML:

http://www.w3.org/TR/xhtml1/#C_8

C. HTML Compatibility Guidelines

This appendix is informative.

[...]

C.8. Fragment Identifiers
[...]
Note that the collection of legal values in XML 1.0 Section 2.3,
production 5 is much larger than that permitted to be used in the ID
and NAME types defined in HTML 4. When defining fragment identifiers
to be backward-compatible, only strings matching the pattern
[A-Za-z][A-Za-z0-9:_.-]* should be used.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
1 2 3