Sujet avec japonais dans l'URL ne redirige pas si l'URL ne correspond pas parfaitement

Sur community.wanikani.com, l’ouverture de liens vers des sujets contenant du japonais dans l’URL complète ne fonctionne plus lorsqu’ils sont ouverts dans un nouvel onglet ou copiés-collés directement. Le clic sur le lien pour naviguer dans le même onglet fonctionne toujours.

Par exemple, ouvrir ce lien dans un nouvel onglet devrait rediriger vers

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

Mais au lieu de cela, il tente de naviguer vers

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

ce qui échoue à se charger.

Si le lien correspond exactement, tout fonctionne correctement. Mais bien sûr, avec les renommages de sujets, ce n’est souvent pas le cas.

J’ai également essayé de reproduire le problème sur try.discourse.org, mais sur cette installation, les caractères japonais ne sont jamais ajoutés à l’URL, même s’ils sont inclus dans le titre du sujet. Je ne sais pas pourquoi c’est le cas, mais sans cela, je ne peux pas démontrer le bug là-bas.

2 « J'aime »

Les deux sont des liens vers le sujet 34890. Ils se chargent correctement pour moi dans Firefox. Quel est le problème ?

3 « J'aime »

soupir On dirait que c’est encore un bug de Chrome. Chez moi, ça fonctionne parfaitement sur Firefox et Edge. Étrangement, cela fonctionne la première fois dans une fenêtre de navigation privée, mais échoue à la deuxième tentative. Il en va de même après avoir vidé le cache et les cookies du site, puis redémarré mon ordinateur.

Chrome indique que l’erreur est due à un nombre trop important de redirections.


Pourriez-vous vérifier sur Chrome afin de confirmer s’il s’agit d’un problème général ou seulement dans mon cas ? Assurez-vous simplement de tenter d’ouvrir la page plusieurs fois, car la première tentative semble fonctionner sans problème. Merci beaucoup pour votre aide !

3 « J'aime »

Je peux reproduire le problème sur Chrome mobile. :bug:

5 « J'aime »

Merci. Je pense que je vais le signaler à Google.

1 « J'aime »

Sur mon téléphone Android avec Chrome, le deuxième lien redirige indéfiniment.

1 « J'aime »

Toujours avec Chrome ? Je veux juste m’en assurer avant de leur signaler le problème. Je suppose que rien n’a changé récemment sur Discourse à ce sujet ? (Quoi qu’il en soit, ce serait probablement toujours un problème de Chrome, puisque cela se produit uniquement là-bas, même si quelque chose avait changé sur Discourse.)

3 « J'aime »

Attendez un peu, cela peut venir de Discourse. Même un bug du service worker.

5 « J'aime »

D’accord, merci pour la mise à jour.

1 « J'aime »

Une mise à jour à ce sujet ?

Cela va prendre un certain temps pour être résolu, mais comme c’est déjà assigné, cela ne passera pas entre les mailles du filet.

7 « J'aime »

Je ne m’attends pas à trouver une quelconque solution ou contournement. Nous devons simplement attendre que cela soit corrigé.

Vous rencontrez toujours ce problème ? Il semble que ce soit peut-être résolu, sauf si je fais quelque chose de différent cette fois.

1 « J'aime »

Eh bien, oublions ça. Cela a recommencé aujourd’hui. Je ne sais pas comment cela a pu être résolu pendant un moment.


Puisque cela risque de prendre du temps, je serais ouvert à des solutions de contournement pour l’instant. J’ai mentionné dans le message d’origine que sur try (et j’ai vérifié ici sur meta également), les caractères japonais ne sont jamais ajoutés à l’URL, contournant ainsi efficacement ce problème. Est-ce un paramètre du site ou de la catégorie dont je pourrais discuter avec mon administrateur de site ? D’autres suggestions de solution de contournement en dehors de celle-ci ?

Lorsque j’entre une URL avec un titre en arabe dans le navigateur, par exemple :

https://forums.coretabs.net/t/2456

je suis confronté à une redirection infinie (et le lien généré n’est pas correct ; je suppose que cela est lié à l’encodage).

Il devrait plutôt rediriger vers :

https://forums.coretabs.net/t/ماذا-يجب-ان-نتعلم-في-javascript-؟/2456

Pourquoi ne pas partager les liens avec leurs titres ?

À cause du mauvais support de l’arabe sur Twitter et Facebook :

  • Ce bug n’existait pas avant les dernières mises à jour (la dernière fois que j’ai essayé de partager un lien remonte à environ deux semaines, et tout fonctionnait parfaitement).
3 « J'aime »

J’ai creusé notre base de code et il semble que l’erreur soit assez simple, mais j’aimerais vérifier mes hypothèses.

Nous avons un paramètre de site nommé slug_generation_method qui doit être modifié de la valeur par défaut ascii à encoded pour déclencher ce bug. Lorsque vous modifiez ce paramètre de site, nous effaçons tous les slugs et les régénérons.

Ce que je ne comprends pas, c’est pourquoi, lorsque le paramètre de site est défini sur “encoded”, nous générons un slug comme ceci :

[3] pry(main)> SiteSetting.slug_generation_method
=> "encoded"
[4] pry(main)> Slug.for(t.slug)
=> "キノの旅-home-thread-intermediate-book-club"

alors que je m’attendais à ce que “encoded” signifie quelque chose comme :

[5] pry(main)> CGI.escape(Slug.for(t.slug))
=> "%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club"

Cela semble provenir de :

Le slug brut de la table est renvoyé dans l’en-tête Location de la réponse 301 lorsque le slug d’un sujet ne correspond pas, et selon moi, nous devrions y renvoyer une URL valide.

9 « J'aime »

Oui, nous devrions nettoyer la méthode de génération d’identifiants pour les données encodées afin de réduire sa dépendance aux fonctionnalités magiques du navigateur.

8 « J'aime »

Alors, dites-vous que l’URL elle-même afficherait la version encodée ? Ou simplement que la redirection le gérerait en interne en utilisant la version encodée ? Dans les deux cas, il serait génial que cela « fonctionne tout seul » sans dépendre des particularités des navigateurs.

1 « J'aime »

Bonjour,

Ce cas est-il résolu ?
Je rencontre toujours ce problème, comme je l’ai mentionné dans le sujet que j’ai initié à ce sujet.

1 « J'aime »

Non, comme l’indique le sujet ouvert dans la catégorie bug ici :sweat_smile:

@sam, j’ai revu cela aujourd’hui et il y a deux approches possibles :

  1. Stocker un slug encodé réel dans la colonne slug lorsque le paramètre de génération de slug est défini sur encoded. Créer une migration pour effacer tous les slugs actuels utilisant des slugs encodés afin qu’ils se régénèrent correctement au fil du temps.

  2. Conserver le slug UTF-8 actuel et le corriger à la volée lors de son envoi dans un en-tête pour une redirection 301.

À mon avis, l’option 1 est « plus correcte » et rendra plus difficile le passage du slug brut à un client. Cependant, simplement corriger le générateur de slug ne suffisait pas, car les navigateurs reçoivent une URL encodée lors d’une redirection 301 mais la décryptent pour la requête suivante, ce qui fait échouer notre comparaison de slug et déclenche une nouvelle redirection. Cela signifie que je devrai également corriger la méthode de comparaison des slugs dans le contrôleur des sujets, et peut-être ailleurs.

Dois-je continuer dans cette voie ?

6 « J'aime »