URL中的非UTF重音字符问题

我们正在迁移一个西班牙语论坛并为所有主题设置永久链接。
现有的标题和 URL 中包含 ISO 8859-15 的重音字符,并使用百分比编码进行转义。

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

我们正在使用 /forum\\/showthread.php\\?(\\d*).*/thread/\\1 重写它们,但不幸的是,在处理永久链接规范化之前,我们遇到了服务器错误(白页)。

例如,您可以在以下位置看到此问题:
https://try.discourse.org/forum/showthread.php?96700-Galer�a-de-im�genes 会导致空白页和“请求无效”。 Rack::QueryParser::InvalidParameterError (invalid byte sequence in UTF-8)

https://try.discourse.org/forum/showthread.php?96700-Galeria-de-imagenes 会显示常规的“未找到”页面。

您有什么不进行大量定制 Nginx 配置即可解决此问题的建议吗?

3 个赞

也许将 96700-Galer%EDa-de-im%E1genes 解码为 ISO 8859-15,然后在生成永久链接前将其编码为 UTF-8 是一个解决方案?或者实际上是否存在一些传入链接在 URL 中使用了 ISO 8859-15 编码的字符?

请注意,我不确定是否需要使用百分比编码才能使永久链接正常工作——我还没有查看代码。我想你需要做一些实验。我认为这没有简单的解决方案。如果你找到了解决方案,请在此处发布。这可能对其他人有所帮助。

1 个赞

是的,有大约 150,000 个外部链接是我们无法控制的。