# Point d'exclamation et caractères spéciaux dans les noms d'utilisateur

**URL:** https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521
**Category:** Migration
**Created:** [Décembre 2, 2022, 4:47 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521 "2022-12-02T16:47:29Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 4:47 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/1 "2022-12-02T16:47:29Z")

</div>

Salut.

Nous sommes en train de migrer une grande communauté sur Discourse depuis vb3.  
De nombreux noms d’utilisateur - environ 1 200 - contiennent le point d’exclamation “!” et je n’ai trouvé aucune option pour le réactiver.  
Nous avons déjà activé les “noms d’utilisateur unicode” sans succès.  
Existe-t-il une solution toute prête pour ce problème ?

Merci !

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Décembre 2, 2022, 4:52 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/2 "2022-12-02T16:52:20Z")

</div>

Non. Changer les caractères légaux dans les noms d’utilisateur n’est pas vraiment une option. Je pense qu’ils devront avoir des noms d’utilisateur moins excitants.

---

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 5:00 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/3 "2022-12-02T17:00:40Z")

</div>

Wow, cela semble être un bel oubli… y a-t-il une explication technique à cela ? Pourrions-nous résoudre cela avec un plugin ou un fork ?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Décembre 2, 2022, 5:08 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/4 "2022-12-02T17:08:14Z")

</div>

Je n’ai pas pris la décision, mais il existe de nombreux systèmes pour lesquels un `!` n’est pas un caractère valide pour un nom d’utilisateur. Il y a de fortes chances que si vous essayiez de l’autoriser dans un plugin (ou un fork, ce qui serait une très, très mauvaise idée si vous voulez à nouveau mettre à jour Discourse), ce sera difficile.

Le `!` a des significations spéciales dans un certain nombre de contextes et je soupçonne que si vous changez simplement le validateur de nom d’utilisateur, un tas d’autres choses casseront.

---

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 5:11 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/5 "2022-12-02T17:11:41Z")

</div>

Je comprends. C’est cependant quelque chose qui devrait être abordé. Toutes les autres solutions BB autorisent ce caractère dans le nom d’utilisateur et il est courant dans les communautés de jeu. Le nom d’utilisateur et l’identifiant utilisateur doivent être conservés comme entités distinctes afin de ne pas avoir de telles limitations. Nous avons environ 95 000 membres et contacter 1 200 d’entre eux pour changer leur nom d’utilisateur va être un vrai casse-pieds. Merci quand même pour votre aide !

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Décembre 2, 2022, 5:16 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/6 "2022-12-02T17:16:49Z")

</div>

J’ai effectué des dizaines, peut-être plus d’une centaine d’importations. Je prête une attention particulière aux personnes qui posent des questions sur les importations ici. C’est la première fois dont je me souvienne que quelqu’un s’en plaigne.

> [@AV\_C](#):
>
> contacter 1 200 d’entre eux pour changer leur nom d’utilisateur va être un vrai casse-tête.

Vous pouvez dire à **tout le monde** d’essayer à la fois leur nom d’utilisateur et leur adresse e-mail (beaucoup d’entre eux ne le sauront pas non plus). Il est fort probable que d’autres noms d’utilisateur aient changé.

Ceci vous donnera tous les noms d’utilisateur qui ont changé :

```
UserCustomField.where(name: 'import_username').pluck(:value)

```

---

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 5:24 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/7 "2022-12-02T17:24:00Z")

</div>

> [@pfaffman](#):
>
> C’est la première fois dont je me souvienne que quelqu’un s’en soit plaint.

J’ai trouvé quelques sujets :

[https://meta.discourse.org/t/username-restrictions/126664](https://meta.discourse.org/t/username-restrictions/126664)

> [@What are the Discourse rules for usernames?](https://meta.discourse.org/t/what-are-the-discourse-rules-for-usernames/160367):
>
> Hello, please can someone point me in the direction of the rules for usernames? I’m trying to establish if ampersands and apostrophes are allowed or not but I cannot find anything in here that helps me. Many thanks.

Ce sera probablement beaucoup plus que de simples points d’exclamation. Cela semble être une limitation étrange, puisque vous pouvez utiliser ces caractères n’importe où ailleurs.

Quoi qu’il en soit, merci pour votre aide.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [Décembre 2, 2022, 5:26 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/8 "2022-12-02T17:26:47Z")

</div>

Il convient de souligner que les noms et les noms d’utilisateur ne sont pas la même chose. Les noms d’utilisateur sont utilisés dans les chemins d’URL, par exemple :

`https://meta.discourse.org/u/pfaffman/summary`

Un point d’exclamation n’est pas un caractère valide dans une URL, tandis que des caractères tels que `?` `&` ont des objectifs spéciaux dans la structure de l’URL et ne peuvent donc pas non plus faire partie d’un nom d’utilisateur. Ceci n’est pas spécifique à Discourse, tout système qui utilise le nom d’utilisateur dans la structure de l’URL doit le respecter.

Un nom d’utilisateur ne peut pas contenir de point d’exclamation, mais le nom peut en contenir, ce que vous pouvez prioriser dans l’interface utilisateur.

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [Décembre 2, 2022, 6:01 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/9 "2022-12-02T18:01:03Z")

</div>

prend tout son sens @Stephen, merci pour ces précisions.

Je pense que nous pourrions simplement modifier le [script d’importation](https://github.com/discourse/discourse/blob/main/script/import_scripts/vbulletin.rb#L158) pour faire quelque chose comme :

```plaintext
username_original = username
username = @htmlentities.decode(user["username"]).strip

{
          id: user["userid"],
          name: username_original,
          username: username,
          password: password,
[...}

```

Et dans le paramètre Discourse activer la priorité pour le nom d’utilisateur “name”, s’il est présent, par rapport au nom d’utilisateur.

---

<div class="post-metadata">

### Author: ![leonardo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/leonardo/32/228634_2.png) [@leonardo](https://meta.discourse.org/u/leonardo)
#### Post date: [Décembre 2, 2022, 7:13 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/11 "2022-12-02T19:13:54Z")

</div>

> [@Stephen](#):
>
> Il convient de souligner que les noms et les noms d’utilisateur ne sont pas la même chose. Les noms d’utilisateur sont utilisés dans les chemins d’URL.

En plus de cela, les noms d’utilisateur sont destinés à être utilisés dans les `@mentions`, et donc on s’attend à ce que les noms d’utilisateur soient simples et faciles à taper ; c’est pourquoi nous n’autorisons que les caractères ASCII par défaut (bien que cela puisse être étendu à l’unicode par le paramètre `unicode_usernames`, mais toujours sans ponctuation).

> [@Crius](#):
>
> Je pense que nous pourrions simplement modifier le [script d’importation](https://github.com/discourse/discourse/blob/main/script/import_scripts/vbulletin.rb#L158) pour faire quelque chose comme

Notez que ce script de migration utilise la classe de base du script de migration non en masse, qui fait ceci avec chaque enregistrement d’utilisateur généré par la méthode que vous avez liée :

> <https://github.com/discourse/discourse/blob/main/script/import_scripts/base.rb#L320>

qui supprime tous les caractères invalides des noms d’utilisateur.

Il existe de nombreux endroits dans le code qui supposent certaines choses sur les noms d’utilisateur (analyse des `@mention`, changement de noms d’utilisateur, etc.), c’est la raison pour laquelle nous appliquons ces restrictions.

Comme le dit Stephen, les noms d’utilisateur ne sont pas l’endroit pour montrer la personnalité de l’utilisateur ; les champs nom et flair le sont 🙂

---

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 8:30 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/12 "2022-12-02T20:30:11Z")

</div>

> [@leonardo](#):
>
> Comme le dit Stephen, les noms d’utilisateur ne sont pas l’endroit pour montrer la personnalité de l’utilisateur ; ce sont le nom et le champ d’insigne.

Il y a encore pas mal de cas limites qui sont difficiles à gérer de cette façon.  
Les noms ne sont pas uniques, si nous donnons la priorité dans la mise en page au nom, vous pouvez imaginer comment cela se passerait dans un forum plein d’adolescents immatures qui jouent et trollent toute la journée 🙂

Il est parfaitement acceptable de dire que cela pourrait être un problème de faible priorité, mais c’est quelque chose qui pourrait clairement bénéficier d’une réflexion et d’un travail, et certainement pas d’une « fonctionnalité » ou de quelque chose qui donne un avantage par rapport à la possibilité de choisir un nom unique sans restrictions fortes comme tout autre logiciel de forum qui existe depuis longtemps.

---

<div class="post-metadata">

### Author: ![AV\_C](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av_c/32/283587_2.png) [@AV\_C](https://meta.discourse.org/u/AV_C)
#### Post date: [Décembre 2, 2022, 8:34 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/13 "2022-12-02T20:34:18Z")

</div>

> [@Stephen](#):
>
> Un point d’exclamation n’est pas un caractère valide dans une URL

Si l’utilisateur est pfaffman!, l’URL serait généralement :  
[https://meta.discourse.org/u/pfaffman&#33;/summary](https://meta.discourse.org/u/pfaffman&#33;/summary)  
Du moins, tout autre CMS sur lequel j’ai jamais travaillé fonctionnait comme ça.

---

<div class="post-metadata">

### Author: ![maiki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maiki/32/233950_2.png) [@maiki](https://meta.discourse.org/u/maiki)
#### Post date: [Décembre 2, 2022, 9:45 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/16 "2022-12-02T21:45:30Z")

</div>

> [@AV\_C](#):
>
> Au moins, tous les autres CMS sur lesquels j’ai jamais travaillé fonctionnaient comme ça

Oh, cool ! Art antérieur. 👍

Voudriez-vous partager certains des projets de CMS open source que vous avez utilisés ? Nous pourrions y jeter un œil et voir comment ils gèrent les permaliens et les références utilisateur, apprendre de leurs efforts. 🙂

Bien que… je me demande si les systèmes de gestion de contenu sont exactement dans le même panier que les forums communautaires ? 🤔

> [@AV\_C](#):
>
> Nous sommes en train de migrer une grande communauté sur Discourse depuis vb3.

Est-ce que « vb3 » fait référence à vBulletin ?

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [Décembre 3, 2022, 12:57 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/17 "2022-12-03T00:57:33Z")

</div>

> [@maiki](#):
>
> Est-ce que « vb3 » fait référence à vBulletin ?

Oui

De plus, la mention de caractères spéciaux encodés n’est pas propre aux CMS, c’est juste un encodage standard : [Percent-encoding - Glossary | MDN](https://developer.mozilla.org/en-US/docs/Glossary/percent-encoding)

---

<div class="post-metadata">

### Author: ![maiki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maiki/32/233950_2.png) [@maiki](https://meta.discourse.org/u/maiki)
#### Post date: [Décembre 3, 2022, 1:18 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/18 "2022-12-03T01:18:33Z")

</div>

Mais alors, comment mentionnerions-nous les gens, @Crius ?!

☝ 😃 👇

```plaintext
Mais alors, comment mentionnerions-nous les gens, @Crius ?!

```

Devrions-nous taper `@maiki!`, pour mentionner quelqu’un avec `maiki!` comme nom d’utilisateur ? 🤔 Comment cela fonctionne-t-il dans vBulletin ?

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [Décembre 3, 2022, 2:59 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/19 "2022-12-03T14:59:50Z")

</div>

vBulletin 3 n’a pas ces fonctionnalités et vBulletin 5… Je ne sais pas s’il a cette fonctionnalité car c’est un logiciel qui est clairement à la traîne en termes de fonctionnalités modernes.

Lorsque vous mentionnez quelqu’un sur Discourse, une suggestion automatique apparaît. Pas besoin de s’inquiéter de devoir taper le pseudonyme complet.  
Edit : Finalement, cela signifie que la suggestion décode la liste des noms d’utilisateur avant de la suggérer si vous le souhaitez vraiment, ou encode l’entrée (l’utilisateur qui écrit la partie) afin qu’elle puisse rechercher le nom d’utilisateur de manière appropriée.

Je veux dire, nous pouvons discuter de la quantité de travail et d’efforts que cela demande, mais pas de savoir si c’est possible.

Dans tous les cas, je ne sais pas si c’est juste le média qui est mauvais pour transmettre l’ambiance, mais toutes ces réponses récentes semblaient un peu “hostiles”. Les gens viennent sur meta.discourse pour demander de l’aide et suggérer des améliorations. Si vous n’êtes pas d’accord, vous pouvez simplement ignorer le fil de discussion et passer à autre chose.

Aussi, j’ai oublié d’ajouter. Si des PRs sont ouverts pour Discourse, je peux essayer de travailler dessus dans un fork et ouvrir un PR. Bien que je ne sois pas un développeur Ruby, j’ai plusieurs années d’expérience en tant qu’ingénieur logiciel / ingénieur plateforme. Je serais ravi d’essayer de contribuer 🙂

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [Décembre 11, 2022, 8:40 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/21 "2022-12-11T20:40:45Z")

</div>

Juste une mise à jour pour la postérité, `!` ne sont pas interdits dans les URL comme mentionné ci-dessus. Je ne sais pas d’où vient cette idée.

Cependant, Ruby semble utiliser `?` et `!` dans ses fonctions, ce qui est une chose étrange à dire honnêtement (du moins dans mes 20+ années d’ingénierie logicielle), mais [chaque langage a ses propres particularités](https://www.destroyallsoftware.com/talks/wat) 🙂

Ce qui pourrait expliquer pourquoi `!` est interdit. Je devrai creuser plus profondément dans le code source de Discourse pour comprendre s’il s’agissait d’un problème spécifique qui ne pouvait pas être résolu ou simplement de quelque chose qui a été interdit avec trop d’enthousiasme pour éviter des problèmes potentiels entre les noms d’utilisateur et Ruby devenant fou dans certains cas extrêmes.

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [Avril 20, 2024, 10:42 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/22 "2024-04-20T10:42:01Z")

</div>

Désolé de déterrer ce vieux fil de discussion, mais j’ai le même problème et je suppose que |, [et] sont également des caractères illégaux pour les noms d’utilisateur et ne peuvent pas être activés d’une manière ou d’une autre ?

Je suis sur le point de migrer un ancien forum de jeu de phpBB3 vers Discourse et de nombreux noms d’utilisateur sont comme `Clan|Nickname` ou `[Clan]Nickname`.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Avril 20, 2024, 11:31 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/23 "2024-04-20T11:31:00Z")

</div>

Je modifierais le script pour rechercher ces caractères et les remplacer par un caractère légal comme \_ ou -. Je pense que cela les supprimera simplement. Vous pouvez examiner le code du nom d’utilisateur suggéré.

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [Avril 20, 2024, 2:35 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/24 "2024-04-20T14:35:02Z")

</div>

Lorsque j’ai migré mon premier forum vers Discourse, j’ai remarqué que les caractères illégaux, à commencer par les espaces vides, mais aussi d’autres, étaient remplacés par \_. Mais sur ce forum, le caractère illégal le plus courant était l’espace vide et pas très souvent, donc ce n’était pas le problème que cela pourrait être maintenant. Quoi qu’il en soit, cela ne peut pas être un obstacle. Peut-être que j’entrerai l’ancien nom d’utilisateur dans le champ nom. On verra - quand j’aurai résolu l’autre problème, à savoir que mon conteneur d’importation ne se construit pas…

[Page suivante](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521.md?page=2)
