我的用户名中有slach的用户。我想给他们简单的网址,例如/user/username
,即使他们的用户名有问题。即/user/xXx/superboy
。
我正在使用客户端路由,我认为没有任何通配符支持。解决这个问题的一个明显方法是编码用户名。 href="/user/xXx%2Fsuperboy"
。但是当访问链接时,浏览器会自动解码网址,然后我的路由器最终无法匹配。有没有办法阻止浏览器自动解码网址或任何其他方式来解决我的问题(可能是一个不同的解码方案?)。感谢。
我正在使用angularjs和angular ui-router进行路由。
答案 0 :(得分:2)
第1部分 在许多情况下可以自动解码 URI ,例如解释一次然后传递解释(重新解释)。
第2部分
在 URI 中的路径中,/
具有特殊含义,因此您不能将其用作文件或目录的名称。这意味着如果您将某些不是路径的真实路径映射到某个路径,则最终可能会出现导致问题的意外字符。要解决这个问题,需要对字符进行编码。
由于您要将用户名映射到 URI ,您必须考虑这可能会发生,因此您必须以允许此操作的方式进行编码。根据您的问题,看起来这种情况发生一次,因此您需要双重编码 URI 的任何不是“真正的URI路径”的部分。 / p>
也许你可以解释这是多么可靠以及是否可取
如果你总是以同样的方式使用它,它应该是可靠的。至于建议,最好使用查询部分,而不是路径。 href="/user?xXx/superboy"
是一个有效的 URI ,您可以轻松获取查询字符串(首先是?
之后的所有内容,或内置方法)。你必须注意的唯一角色是#
,它具有特殊意义。