Problèmes de caractères accentués non-UTF dans les URL

Nous migrons un forum espagnol et mettons en place des permaliens pour tous les sujets.
Les titres et URL existants contiennent des caractères accentués en ISO 8859-15, échappés avec un encodage en pourcentage.

forum/showthread.php?96700-Galer%EDa-de-im%E1genes

Nous les réécrivons avec /forum\\/showthread.php\\?(\\d*).*/thread/\\1 mais malheureusement nous obtenons une erreur serveur (avec une page blanche) avant que la normalisation des permaliens ne soit traitée.

Vous pouvez le voir par exemple sur Try :

https://try.discourse.org/forum/showthread.php?96700-Galer�a-de-im�genes donne une page blanche et « bad request ». Rack::QueryParser::InvalidParameterError (invalid byte sequence in UTF-8)

https://try.discourse.org/forum/showthread.php?96700-Galeria-de-imagenes donne la page habituelle « not found ».

Avez-vous des conseils pour contourner cela sans trop de modifications spécifiques à nginx ?

3 « J'aime »

Peut-être que décoder 96700-Galer%EDa-de-im%E1genes en ISO 8859-15 et l’encoder en UTF-8 avant de générer le permalien serait une solution ? Ou existe-t-il réellement des liens entrants qui utilisent les caractères encodés en ISO 8859-15 dans l’URL ?

Notez que je ne suis pas sûr s’il est même nécessaire d’utiliser l’encodage pourcentage pour que les permaliens fonctionnent – je n’ai pas regardé le code. Je suppose qu’il faudra expérimenter un peu. Je ne pense pas qu’il y ait de solution facile à cela. Si vous trouvez une solution, veuillez la poster ici. Elle pourrait être utile à d’autres.

1 « J'aime »

Oui, il existe environ 150 000 liens externes sur lesquels nous n’avons aucun contrôle.