2

我的用户名中有斜杠。我想给他们简单的网址,例如/user/username即使他们的用户名有问题。即/user/xXx/superboy

我正在使用客户端路由,但我认为没有任何通配符支持。解决此问题的一种明显方法是对其用户名进行编码。href="/user/xXx%2Fsuperboy". 但是浏览器在访问链接时会自动解码 url,然后我的路由器最终还是不匹配。有什么方法可以防止浏览器自动解码 url 或任何其他方法来解决我的问题(也许是不同的解码方案?)。谢谢。

我正在使用 angularjs 和 angular ui-router 进行路由。

4

1 回答 1

2

第 1 部分。URI
的自动解码可以在许多情况下遇到,例如它被解释一次然后解释传递(重新解释)。

第 2 部分。
URI中的路径中,/具有特殊含义,因此不能将其用作文件或目录的名称。这意味着,如果您将不是真实路径的东西映射到路径,您最终可能会遇到导致问题的意外字符。为了解决这个问题,需要对字符进行编码。

当您想将用户名映射到URI时,您必须考虑可能会发生这种情况,因此您必须以允许这种情况的方式进行编码。从您的问题来看,这似乎发生了一次,因此您需要对不是“真实 URI 路径”的URI的任何部分进行双重编码。

另外,也许您可​​以解释这是多么可靠以及是否可取

如果您始终以相同的方式使用它,它应该是可靠的。至于可取的,最好使用查询部分,而不是路径href="/user?xXx/superboy"是一个有效的URI,您可以轻松获取查询字符串(first 之后的所有内容?,或内置方法)。唯一需要注意的字符是#,它又具有特殊含义。

于 2013-06-10T07:19:55.963 回答