2016-07-31 354 views
0

我生成一个编码的值以在我的URL中传递,问题是,我们的SEO经理配置应用程序,传递小写URL,他说他不会更改配置。现在我必须以某种方式编码我的网址,大写,或整个字符串得到由他们的字符代码进行编码,所以我可以通过它没有废墟的主要价值,区分大小写的URL不区分大小写

例如,我产生的base64字符串如下:

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

无法读取...在解码时遇到问题。

+0

它是你尝试的某个表单字段值在这里编码?如果是这样,为什么将它包含在Url中而不是POST呢? – sachin

+0

@sachin导致读者不会发布,它只会得到(或最后,提供所有样本得到) – deadManN

+0

'我们的SEO经理配置应用程序,传递小写URL,他说他不会改变配置' - 让IT人员配置他的互联网访问权限,以使YouTube网址也变为小写。 – GSerg

回答

1

如果将base64转换为小写字母,则无法使用base64进行编码,base64依赖于使用大写字符。

如果您的管理器坚持的配置是传入或传出的查询字符串参数被错误地放在低位,但是,您应该通知他他违反了URI规范,特别是query string部分。当然,最终由您自己的内部公司做出选择,不管您是否希望在内部URI中使用小写字母,但是您不应该认为其他处理URI的应用程序会像这样操作。

作为@sachin上面陈述的,如果你可以让这个POST请求(而不是像我现在假设的那样得到一个GET),并且假设你的管理员在发送它们的时候并不低调:/你可以通过POST发送这些数据。

或者,您可以使用Base32来解决此问题,它只依赖大写字符,但您可以在解码(现在是Base32)字符串之前将其接收到的值转换为大写。这是一个相当荒谬的解决方案,虽然...

只是要清楚:“大声笑”将在Base32中编码为“NRXWY ===”,然后将其降低到“nrxwy ===”,然后您可以在解码之前返回“NRXWY ===”。

这是两个的NuGet程序包,它们Base32编码:

  1. Base32按照RFC4648 here和作者声称它的测试,工作正常。

  2. 另一个看起来很吸引人的软件包,因为它支持zBase32 here,zBase32的优势在于它只使用小写字母,因此您不必担心更改大小写。门房/作者包括了如何让zBase32编码指令

两者的这些(Base32和zBase32)使用Base64编码字符集,所以他们都会很好地工作的URI,所有的charcaters的使用在URI中是有效的(utf-8的内容是无关紧要的,因为你只是编码字节,所以当你从Base32解码时你会得到相同的字节)

+0

好吧,我告诉他,但它没有任何作用,我看着它以某种方式编码它能够采取大写char回来,有效的标志不是base64本身的一部分。顺便说一句base32使用什么?它需要更多的字符编码吗?例如base64只需要+,/和=。第二,我们是基于utf-8字符系统的用户,base32支持这件事情吗?第三,base32是否在C#语言上实现? – deadManN

+0

我已经更新了答案,但简短的版本是不,它使用较少的编码字符,是的,它仍然支持utf-8,并且它是用C#实现的,但是你必须抓取一个库,可能来自NuGet:P – starlight54

+0

它的工作,我使用了第二个版本,因为它有casesensitive校正。 – deadManN