Javascript - encodeURI()在不同的浏览器中修复不同的结果

时间:2015-12-13 09:27:18

标签: javascript php internet-explorer urlencode microsoft-edge

我使用encodeURI()来编码一个php请求网址,它在Firefox和Chrome中运行得非常好,但它在IE / Edge中没有。

实际网址是: http://localhost/get.php?id=e_e2&title=e2&desc=just a note&stime=6/12/2015, 1:00:00 AM&etime=15/12/2015, 1:00:00 PM

Firefox返回的是什么(有效): http://localhost/get.php?id=e_HO%20Event%201&title=HO%20Event%201&desc=This%20is%20just%20a%20test%20event%20of%20this%20handover%20only&stime=6/12/2015,%201:00:00%20AM&etime=10/12/2015,%201:00:00%20PM

IE返回什么(打破php代码): http://localhost/get.php?id=e_HO%20Event%201&title=HO%20Event%201&desc=This%20is%20just%20a%20test%20event%20of%20this%20handover%20only&stime=%E2%80%8E6%E2%80%8E/%E2%80%8E12%E2%80%8E/%E2%80%8E2015%E2%80%8E%20%E2%80%8E1%E2%80%8E:%E2%80%8E00%E2%80%8E:%E2%80%8E00%E2%80%8E%20%E2%80%8EAM&etime=%E2%80%8E10%E2%80%8E/%E2%80%8E12%E2%80%8E/%E2%80%8E2015%E2%80%8E%20%E2%80%8E1%E2%80%8E:%E2%80%8E00%E2%80%8E:%E2%80%8E00%E2%80%8E%20%E2%80%8EPM

我试图解码IE返回的内容,但它给我带来了很多问题!所以有没有其他的encodeURI()?,即使我不编码网址,FF似乎也能正常工作,如果我复制,IE就可以工作FF编码的网址!

更新: 示例代码link

我认为它与toLocaleString()

有关

最终更新:

很少有人回答,链接中出现了一些标记"只出现在IE中!"我必须过滤并更改我的PHP脚本日期格式以删除逗号

function FixLocaleDateString(localeDate) {
    var newStr = "";
    for (var i = 0; i < localeDate.length; i++) {
        var code = localeDate.charCodeAt(i);
            if (code != 44 && code != 8206 ) {
                newStr += localeDate.charAt(i);
            }
    }
        return newStr;
}

我在另一个答案中找到了这个函数并对其进行了修改:ToLocaleDateString() changes in IE11

3 个答案:

答案 0 :(得分:3)

问题不在于encodeURI(尽管正如其他人所指出的那样,你绝不应该使用encodeURI,而是使用encodeURIComponent编码单个组件,然后将它们连接在一起)。

问题是日期由于某种原因包含许多U+200E "LEFT-TO-RIGHT MARK"个字符(不可见,但仍然存在),一旦编码成为%E2%80%8E

告诉我们您在何时/如何获得时间,或者在编码之前过滤时间字符串以删除这些字符。

答案 1 :(得分:0)

如果要对URL参数进行编码,请使用encodeURIComponent。

以下是一些有用的链接

When are you supposed to use escape instead of encodeURI / encodeURIComponent?

https://coderwall.com/p/y347ug/encodeuri-vs-encodeuricomponent

答案 2 :(得分:0)

定义一个简单的params对象来表示所需的URL参数并粘贴其项目。如果属性中有一些不正确的字符,则需要在encodeURIComponent()调用之前将其过滤掉。

var params = {
  'id': 'e_'.concat(event.title.toString()),
  'title': event.title.toString(),
  'desc': event.description.toString(),
  'stime': stime.toString(),
  'etime': etime.toString()
};

var chunks = [];
for (var property in params) {
  if (params.hasOwnProperty(property)) {
    chunks.push(property.concat('=', encodeURIComponent(params[property])));
  }
}
var href = 'http://localhost/get.php?'.concat(chunks.join('&'));

console.log(href);