IE导致奇怪的字符显示在GET

时间:2018-10-09 20:38:54

标签: angular typescript internet-explorer

编辑:我的一位同事刚刚提到IE处理toLocalDateString()的方式与其他浏览器不同...看来我将使用moment.js来解决此问题。另外,这个问题是重复的,不确定是否应该删除它。这是一个很好的答案:

ToLocaleDateString() changes in IE11

在执行带有角度的GET请求时,我看到一些奇怪的行为。我只在IE11中看到这个问题; Chrome和Firefox都可以。我通过查询字符串参数发送两个日期。我将字符串追加如下:

import { Http, Response, RequestOptions, Headers } from '@angular/http';
....

var date1 = new Date();
var date2 = new Date();
var start = date1.toLocaleDateString();
var end = date2.toLocaleDateString();
var url = '/localhost/someEndPoint?start=' +
        start +
        '&end=' +
        end +
        '&value1=' +
        data.value1 +
        '&value2=' +
        data.value2;
return this.http.get(url).
        map((response: Response) => <any>response.json())
        .publishReplay(1)
        .refCount()
        .catch(this.handleError);

当我检查网络时,URL中出现奇怪的字符(不确定它们是否会出现在这里)

Request URL: http://localhost:37424/someEndPoint?start=â10â/â9â/â2018&end=â10â/â9â/â2018&value1=-1&value2=-1

如果我要对这些日期进行硬编码,则请求可以顺利通过。对我来说更奇怪的是,如果我这样做(也无需硬编码)也可以使用:

encodeURI(url);

我确定我会丢失一些东西,但是似乎是指向IE做一些时髦的事情。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用JavaScript encodeURIComponent(url);

https://www.w3schools.com/jsref/jsref_encodeURIComponent.asp

答案 1 :(得分:0)

这是IE 11的公共行为/错误(仅在IE11中发生)。使用toLocaleDateString方法获取日期时,它将添加这些Unicode字符\ u200E(从左到右标记)。为避免这种情况,可以使用string.replace()方法删除这些字符。代码如下:

var start = date1.toLocaleDateString().replace(/[\u200E]/g, "")