编码的 url 在 angular 中没有正确重定向,如何将编码的 url 路由到正确的地址?
Encoded url is not redirecting properly in angular, how to route encoded url to proper address?
如何将编码的特殊字符 url 重定向到正确的地址?
在我的项目中编码 url 路由到网页。
我创建了这样的路线
{ 路径:'welcome/:id',组件:WelcomeComponent },
实际上我正在通过 url 喜欢
http://localhost/welcome%3Fid%3D45
但这不接受
它只接受
http://localhost/welcome?id=45
可能使用 encodeURIComponent 发送参数,并使用 decodeURIComponent 使其在接收后可读
在定义像{ path: 'welcome/:id', component: WelcomeComponent }
这样的路由时,您通常会在浏览器中这样调用它:/welcome/45
您提到的 url (http://localhost/welcome?id=45
) 改为使用查询参数 (id),不确定这是否会映射到相同的参数。 URL 的 ? 不能编码,因为它是 URL 中的一些保留字符,用于指示 URL 参数。
如果生成那些 URLs 的系统实际上给你这样错误的 URLs(从这里的另一条评论中读到那些 URLs 不是你生成的),你必须先手动解码 URL。
{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]);
}
}
router.navigateByUrl()
您可以将 router.navigateByUrl()
with absolute path to replace the router.navigate()
与相对 URL 一起使用。
我遇到了同样的问题,并且混淆了之前的两个答案:
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()
{
}
}
如何将编码的特殊字符 url 重定向到正确的地址? 在我的项目中编码 url 路由到网页。 我创建了这样的路线
{ 路径:'welcome/:id',组件:WelcomeComponent },
实际上我正在通过 url 喜欢 http://localhost/welcome%3Fid%3D45 但这不接受 它只接受 http://localhost/welcome?id=45
可能使用 encodeURIComponent 发送参数,并使用 decodeURIComponent 使其在接收后可读
在定义像{ path: 'welcome/:id', component: WelcomeComponent }
这样的路由时,您通常会在浏览器中这样调用它:/welcome/45
您提到的 url (http://localhost/welcome?id=45
) 改为使用查询参数 (id),不确定这是否会映射到相同的参数。 URL 的 ? 不能编码,因为它是 URL 中的一些保留字符,用于指示 URL 参数。
如果生成那些 URLs 的系统实际上给你这样错误的 URLs(从这里的另一条评论中读到那些 URLs 不是你生成的),你必须先手动解码 URL。
{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]);
}
}
router.navigateByUrl()
您可以将 router.navigateByUrl()
with absolute path to replace the router.navigate()
与相对 URL 一起使用。
我遇到了同样的问题,并且混淆了之前的两个答案:
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()
{
}
}