区分大小写到URL不区分大小写

本文关键字:大小写 不区 URL | 更新日期: 2023-09-27 17:59:19

我正在生成一个编码值,以便在我的URL中传递,问题是,我们的SEO经理将应用程序配置为传递小写URL,他说他不会更改配置。现在我必须以某种方式对我的url进行编码,大写字母或整个字符串由它们的字符代码编码,这样我就可以在不破坏主值的情况下传递它

例如,我得到的base64字符串如下:

aHR0cDovL2xvY2FsaG9zdDoxMzUwL2hvdGVscy9nMy8xMzk1LTA1LTEwLzEvOTI3MjIyZmY
but it turn to be like this, when is passed to controller:
ahr0cdovl2xvy2fsag9zddoxmzuwl2hvdgvscy9nmy8xmzk1lta1ltewlzevoti3mjiyzmy

无法阅读。。。解码时该情况会导致问题。

区分大小写到URL不区分大小写

如果它将被转换为小写,则不能使用base64对其进行编码。base64依赖于使用大写字符。

但是,如果您的经理坚持的配置是传入或传出查询字符串参数的小写不正确,那么您应该通知他,他违反了URI规范,特别是查询字符串部分。当然,是否只想在内部URI中使用小写字母,最终取决于您自己的公司内部选择,但您不应该假设其他处理URI的应用程序会这样操作。

正如@sachin上面所说,如果你可以将其作为POST请求(而不是像我现在假设的那样的GET),并且假设你的经理在发送这些请求时也没有降低大小写:/你可以通过POST发送这些数据。

或者,您可以使用Base32来解决这个问题,它只依赖于大写字符,但您可以在解码(现在的Base32)字符串之前,在收到值时简单地将其转换为大写。不过,这是一个非常荒谬的解决方案。。。

需要明确的是:;lol";将在Base32中编码为"0";NRXWY==";然后将其小写为"0";nrxwy==";然后可以将其大写回";NRXWY==";在解码之前。

这是两个进行Base32编码的NuGet包:

  1. Base32符合RFC4648,作者声称它经过了测试,工作正常。

  2. 另一个包看起来很吸引人,因为它在这里支持zBase32,zBase32的优点是它已经只使用小写字符,所以你不必担心更改大小写。搬运工/作者已经包括了如何获得zBase32编码的说明

这两个(Base32和zBase32)都使用Base64字符的子集,所以它们都可以很好地处理URI,所有使用的字符在URI中都是有效的(utf-8内容无关,因为您只是在编码字节,所以当您从Base32解码时,您会得到相同的字节)