Probleme mit nicht-UTF-kodierten Akzentzeichen in URLs

Wir migrieren ein spanisches Forum und richten Permalinks für alle Themen ein.
Die vorhandenen Titel und URLs enthalten akzentuierte Zeichen in ISO 8859-15, die mit Prozentkodierung maskiert sind

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

Wir schreiben sie mit /forum\\/showthread.php\\?(\\d*).*/thread/\\1 um, aber leider erhalten wir einen Serverfehler (mit einer weißen Seite), bevor die Permalink-Normalisierung verarbeitet wird.

Sie können dies zum Beispiel auf Try sehen:

https://try.discourse.org/forum/showthread.php?96700-Galer�a-de-im�genes gibt eine leere Seite und “bad request”. Rack::QueryParser::InvalidParameterError (invalid byte sequence in UTF-8)

https://try.discourse.org/forum/showthread.php?96700-Galeria-de-imagenes gibt die normale “not found”-Seite.

Haben Sie Tipps, wie Sie dies ohne zu viel benutzerdefinierte Nginx-Anpassung umgehen können?

3 „Gefällt mir“

Könnte die Lösung darin bestehen, 96700-Galer%EDa-de-im%E1genes als ISO 8859-15 zu dekodieren und als UTF-8 zu kodieren, bevor der Permalink generiert wird? Oder gibt es tatsächlich eingehende Links, die die in ISO 8859-15 kodierten Zeichen in der URL verwenden?

Bedenken Sie, dass ich nicht sicher bin, ob Prozentkodierung überhaupt notwendig ist, damit Permalinks funktionieren – ich habe den Code nicht angesehen. Ich schätze, Sie müssen ein wenig experimentieren. Ich glaube nicht, dass es dafür eine einfache Lösung gibt. Wenn Sie eine Lösung finden, posten Sie sie bitte hier. Sie könnte anderen helfen.

1 „Gefällt mir“

Ja, es gibt etwa 150.000 externe Links, über die wir keine Kontrolle haben.