如何将编码的特殊字符url重定向到正确的地址? 在我的项目中将编码的url路由到网页。 我创建了这样的路线
{路径:“ welcome /:id”,组件:WelcomeComponent},
实际上我正在传递网址,例如 http://localhost/welcome%3Fid%3D45 但这不接受 它只接受 http://localhost/welcome?id=45
答案 0 :(得分:1)
我遇到了同样的问题,并混合了之前的两个答案:
1)创建一个PageNotFoundComponent,并添加路由:
{ path: '**', component: PageNotFoundComponent }
2)在构造函数中检测解码URL的可能更改:
export class PageNotFoundComponent implements OnInit
{
constructor(private router: Router, private route: ActivatedRoute)
{
const url = decodeURIComponent(this.router.url);
if (url !== this.router.url)
{
this.router.navigateByUrl(url);
}
}
ngOnInit()
{
}
}
答案 1 :(得分:0)
也许使用encodeURIComponent发送参数,并使用decodeURIComponent使其在接收后可读。
答案 2 :(得分:0)
在定义{ path: 'welcome/:id', component: WelcomeComponent }
之类的路线时,通常会在浏览器中这样称呼它:/welcome/45
您提到的网址(http://localhost/welcome?id=45
)使用查询参数(id),不确定是否将其映射为相同的网址。此URL的?不能进行编码,因为它是URL中的一些保留字符,用于指示URL参数。
如果生成这些URL的系统实际上为您提供了此类错误的URL(请从此处另一条评论中得知,这些URL不是您生成的),则必须首先手动解码该URL。
答案 3 :(得分:0)
{path: '**', component: 'NotFoundComponent'}
export class NotFoundComponent{
constructor(private router:Router,
private route: ActivatedRoute,
) {
let url = this.router.url;
url = url.replace(/%40/gi, '@')
.replace(/%3A/gi, ':')
.replace(/%24/gi, '$')
.replace(/%2C/gi, ',')
.replace(/%3B/gi, ';')
.replace(/%2B/gi, '+')
.replace(/%3D/gi, '=')
.replace(/%3F/gi, '?')
.replace(/%2F/gi, '/');
if(url !== this.router.url){
this.router.navigate([url]);
}
}
答案 4 :(得分:0)
router.navigateByUrl()
您可以使用带有绝对路径的router.navigateByUrl()
来用相对URL替换router.navigate()
。