编码的网址未按正确的角度重定向,如何将编码的网址路由到正确的地址?

时间:2019-06-17 08:00:22

标签: angular angular7 urlencode urldecode

如何将编码的特殊字符url重定向到正确的地址? 在我的项目中将编码的url路由到网页。 我创建了这样的路线

{路径:“ welcome /:id”,组件:WelcomeComponent},

实际上我正在传递网址,例如 http://localhost/welcome%3Fid%3D45 但这不接受 它只接受 http://localhost/welcome?id=45

5 个答案:

答案 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()

URL Encoding breaking angular 2 navigation