Bonjour,

Tout est dans le titre : est-il déconseillé d'utiliser des accents dans les valeurs des attributs HTML ?

Exemple : peut-on ou ne peut-on pas faire cela : <input type="text" name="votre_numéro"/>

De plus, est-ce qu'on peut utiliser les mots "ton, ta, votre, nôtre, etc." dans les valeurs de ces dits attributs ?

Merci d'avance. Bonne journée !
Pour les attributs en règle générale, du point de vue du client, aucune contrindication, les seuls caractères qui doivent être systématiquement sous forme d'entités sont & <, >, ' et ", même si certains navigateurs sont très tolérants.

Par contre, tout comme on ne recommande pas les accents dans les noms de fichier, on ne recommande pas non plus les accents dans les identifiants qui ont une utilité programmatique comme les id ou les name. Ca peut probablement marcher, mais ça risque facilement de bugger pour plein de raisons avec certains navigateurs ou dans certains contextes, et c'est parfois assez difficile de repérer l'origine du problème. Bref, je ne pense pas que ça soit standard.

A vérifier si les accents sont officiellement interdits dans name et id du point de vue du W3C; je pense que oui, pour des raisons de fiabilité du code.
Ok, merci pour les accents l'ami Smiley biggrin

En ce qui concerne les "ton/ta/nôtre/votre etc" dans les valeurs d'attr, qu'en est-il ?
Salut,

Pour savoir quels caractères sont autorisés dans les attributs, il suffit de consulter la colonne type du tableau des attributs HTML (pour le HTML 4 et le XHTML 1) pour l'attribut en question : par exemple, si le type renseigné est ID ou NAME, alors la valeur de l'attribut doit commencer par une lettre, suivi de lettres, chiffres, tirets, underscores, points ou deux points ; si le type renseigné est CDATA, les règles sont plus souples.

En HTML 5, les règles ont évolué, en ce sens que, par exemple, la valeur de l'attribut id peut comporter n'importe quel caractère, sauf ceux d'espace (espace, tabulation, retour à la ligne, retour chariot, saut de page) (pour d'autres attributs, se reporter à la section de la spec qui en parle).
J'ai eu le cas à traiter dernièrement sur un intranet, des id avec accents.

En HTML pas de soucis, par contre ça ne marchait pas en javascript donc je continue d'éviter les accents
Modérateur
Nohak_ a écrit :

En ce qui concerne les &quot;ton/ta/nôtre/votre etc&quot; dans les valeurs d'attr, qu'en est-il ?

Une bonne pratique est de toujours utiliser l'anglais. Ce qui simplifie la donne niveau accents et caractères étranges.
 <input type="text" name="your_number"/>

De manière générale, de toute façon, pour les même raison qu'il est mieux d'utiliser l'anglais, il est mieux d'éviter accents et autre caractères bizarres. il est très courant qu'un code doivent être repris, revu, lu par des gens d'autres pays et d'autres langues. On a dû reprendre du code norvégien avec des caractères improbables partout, c'était assez épique.

Sinon, "your_number" n'est pas très clair comme nom, on utilisera généralement plus volontiers "user_number", "number", "id-card-number" ou que sais-je encore selon les cas. Si ça peut paraître plaisant de faire correspondre l'intitulé humain "Votre numéro" à celui du code, l'intitulé humain peut demain changer en "Mon numéro" pour des raisons de compréhension (ou éditoriale/marketing), et on ne changera évidement pas l'intitulé machine.
De manière générale, généralement les mon/ma/mes/votre/vos fait référence à un utilisateur/compte, alors que les notre/nos/votre/vos fait référence à un groupe/société etc.

Mais bon tout cela ce ne sont que des conseils, pas des absolus.
et pour le name, php a beau être tolérant,je doute qu'il apprécie un $_POST['numéro'], ou du moins qu'il le comprenne ^^

Personnellement, plutôt que l'anglais, j'ôte juste les accents, que ça soit dans les id, les class ou les name. Ca évite d'utiliser par mégarde un mot réservé ^^ Ce qui a l'avantage pour un non-anglophile comme moi que ça soit directement compréhensible :

echo $objet->affDebutQuete();

m'a toujours paru plus instinctif que
echo $objet->affBeginQuest();


Smiley biggol
D'accord, merci pour vos réponses Smiley smile

En fait, je me suis aperçu que taper du code HTML pour faire un formulaire était assez long et répétitif. Du coup j'ai programmé un p'tit truc en PHP pour générer (et traiter) les formulaires. Le truc, c'est que la valeur de l'ID d'un élément HTML est égal à la valeur de l'attr for d'un label, qui est égal (à quelques accents/espaces/caractères spéciaux près) à ce qui est affiché entre <label></label>.

Apparemment je n'aurais pas dû faire ça. Mais bon, c'est quand même un gain de temps considérable !
Modifié par Nohak_ (28 Feb 2014 - 16:28)
Bah il suffit d'ajouter la conversion des accents à ton moteur php ^^

cadeau :
function stripAccents($string){
	return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
a écrit :
et pour le name, php a beau être tolérant,je doute qu'il apprécie un $_POST['numéro'], ou du moins qu'il le comprenne ^^

Php ne voit aucun inconvénient à ce que les clés d'un tableau associatif ait des accents ou même des espaces ou des caractères spéciaux (y compris $!). Je l'ai déjà fait et ça peut être pratique parfois (dans des cas qui n'ont rien à voir avec les formulaires).

En javascript non plus, le moteur en lui-même se moque pas mal d'avoir des propriétés d'objets qui contiennent des accents, espaces et caractères spéciaux. On est par contre bien sûr obligé d'utiliser la syntaxe crochet, sinon c'est erreur de syntaxe. ET dans tous les cas, c'est forcément moins facile à lire et à comprendre.

Le seul problème c'est de pouvoir y faire référence. Techniquement, ça marche à condition que l'encodage du fichier php ou js et celui de la page HTML soit le même. Mais comme déjà dit, on se facilite grandement la tâche en optant pour l'anglais, où on n'a pas à se poser ce genre de question.

Intéressante la réponse de Victor, j'ignorais que les règles de nommage avaient un peu changé en HTML5.

Du côté des déterminants possessifs, c'est des mots comme les autres donc techniquement rien ne t'interdit de les utiliser.
Par contre, en général, j'ai l'impression que « ton » marche mieux pour viser les enfants et les jeunes/ados, tandis que « votre » est mieux dès lors qu'on est tout public.
Lothindil a écrit :
Bah il suffit d'ajouter la conversion des accents à ton moteur php ^^

cadeau :
function stripAccents($string){
	return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}


Je disais que je n'aurais sûrement pas dû faire un moteur PHP comme ça par rapport à l'utilisation de l'anglais Smiley smile
Sinon, ta fonction ne semble pas marcher pour les encodages nécessitant plus de 8 bits, merci quand même !
J'en ai trouvé une qui est plus puissante et plus "belle" (et qui peut bosser sur plus de 8 bits). Je te la donne ci-dessous.


/**
     * Supprimer les accents
     *
     * @param string $str chaîne de caractères avec caractères accentués
     * @param string $encoding encodage du texte (exemple : utf-8, ISO-8859-1 ...)
     */
    function suppr_accents($str, $encoding='utf-8')
    {
    // transformer les caractères accentués en entités HTML
    $str = htmlentities($str, ENT_NOQUOTES, $encoding);
     
    // remplacer les entités HTML pour avoir juste le premier caractères non accentués
    // Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ...
    $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
     
    // Remplacer les ligatures tel que : Œ, Æ ...
    // Exemple "Å“" => "oe"
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
    // Supprimer tout le reste
    $str = preg_replace('#&[^;]+;#', '', $str);
     
    return $str;
    }


Je sais, c'est mal de c/c, mais bon. Je ne fais que réutiliser ce qui a déjà été codé. Et puis elle m'a l'air bien compliqué à coder, cette fonction...



Merci pour ces quelques précisions QuentinC Smiley smile
Modifié par Nohak_ (01 Mar 2014 - 09:17)