Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-encodeURI()在不同的浏览器中返回不同的结果_Javascript_Php_Internet Explorer_Urlencode_Microsoft Edge - Fatal编程技术网

Javascript-encodeURI()在不同的浏览器中返回不同的结果

Javascript-encodeURI()在不同的浏览器中返回不同的结果,javascript,php,internet-explorer,urlencode,microsoft-edge,Javascript,Php,Internet Explorer,Urlencode,Microsoft Edge,我使用encodeURI()对php请求url进行编码,它在Firefox和Chrome中工作得非常好,但在IE/Edge中却没有 实际url为: http://localhost/get.php?id=e_e2&title=e2&desc=just 备忘和时间=2015年12月6日,凌晨1:00:00,时间=2015年12月15日,下午1:00:00 Firefox返回的是(工作): http://localhost/get.php?id=e_HO%20Event%201&title=HO%2

我使用encodeURI()对php请求url进行编码,它在Firefox和Chrome中工作得非常好,但在IE/Edge中却没有

实际url为:
http://localhost/get.php?id=e_e2&title=e2&desc=just 备忘和时间=2015年12月6日,凌晨1:00:00,时间=2015年12月15日,下午1:00:00

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()还有其他替代方案吗?即使我不编码url,FF似乎也能工作,如果我将FF编码的url复制到IE中,IE也能工作


更新: 示例代码

我认为这与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;
}
函数fixLocaleDataString(localeDate){
var newStr=“”;
对于(var i=0;i

我在另一个答案中找到了这个函数,并对其进行了修改:

当您想要对URL参数进行编码时,请使用encodeURIComponent

这里有一些有用的链接


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

问题在于,由于某种原因,日期包含大量
U+200E“从左到右标记”
字符(不可见,但仍然存在),一旦编码,这些字符就会变成
%E2%80%8E


显示您获取时间的位置/方式,或过滤时间字符串以在编码之前删除这些字符。

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

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);

请为特殊字符尝试encodeURIComponent()。请显示您的实际代码。@SyntaxLAMP不是,它会弄乱整个url,并且不会在任何地方工作@MaxZuber这是代码
var phphref=http://localhost/get.php?id=e_'+event.title+'&title='+event.title+'&desc='+event.description+'&stime='+stime+'&etime='+etime;log('url only:');console.log(phphref);//精细函数myFunction(uri){var res=encodeURI(uri);//console.log(res);return res;}var calfile=myFunction(phphref);log('encoded:');console.log(calfile);//ff很好,ie不行谢谢我想我找到了导致这一切的问题!(可能),查看两种浏览器中生成的url的结果,我发现IE中缺少一个(,),这是因为ToLocalString(),因为在IE中,如果您不在美国,它会返回一个不同的值。现在根据我使用的
tolocalesting('en-US')但它并没有带来任何不同\我的代码太大:\但是我创建了这个例子,如果你在IE/FF@et3rnal中测试它,它也会有同样的问题,我不知道为什么你想使用
toLocaleString
作为你要发送到服务器的日期,它需要被服务器解析
toLocaleString
用于将日期转换为直接呈现给用户的字符串。对于内部使用,我建议您使用绝对时间戳值(从纪元开始的毫秒数)或
toISOString
,这将提供一个带有标准格式的日期,您可以确信您可以信赖。我用尽所有方法后重新阅读您的答案,最后我过滤了有线LTR标记以及逗号!我不明白为什么我会忽视它。现在可以正常工作了,这是一个简单的过滤函数(我在另一个问题中找到并修改了它)
函数fixLocaleDataTestRing(localeDate){var newStr=“”;for(var I=0;I
谢谢您提供的信息,我以后可能会更改它。我之所以使用它,是因为它是我使用的插件的一部分。