我正在开发使用CodeIgniter(PHP 7.1.1)网站,在客户端,我需要一些日期发送到服务器:微软边缘AJAX怪异POST数据enconding
var date_str = date.toLocaleDateString();
var time_str = date.toLocaleTimeString().split(':');
time_str = time_str[0] + ':' + time_str[1];
...
data_to_ajax = {
date: inicio,
date2: termino
};
...
服务器将使用验证这些日期:
DateTime::createFromFormat('d/m/Y H:i', $date);
DateTime::createFromFormat('d/m/Y H:i', $date2);
它工作正常,使用Microsoft边缘时除外,createFromFormat
将始终发送的日期返回false。为了调试我叫var_dump
上的日期发送,我得到的是:
string(43) "29/08/2017 21:00"
string(31) "29/08/2017 23:30"
而在浏览器和Mozilla什么我得到的是:
string(16) "29/08/2017 21:00"
string(16) "29/08/2017 23:30"
好,调试HTTP主体数据发送,铬和Mozilla浏览器将发送63个字节:
date_loc=29%2F08%2F2017+21%3A00&date_ter=29%2F08%2F2017+23%3A30
而边缘189发送(63 * 3)字节:
date_loc=%E2%80%8E28%E2%80%8E%2F%E2%80%8E08%E2%80%8E%2F%E2%80%8E2017+%E2%80%8E21%E2%80%8E%3A%E2%80%8E00%E2%80%8E&date_ter=%E2%80%8E28%E2%80%8E%2F%E2%80%8E08%E2%80%8E%2F%E2%80%8E2017+23%3A30
两个似乎是正确的,因为这:url encoder/decoder可以将其解码,这些问题似乎是与服务器,为什么PHP的显示,两个字符串具有相同的字符数有不同的长度?更奇怪的是var_dump
可以正常显示这些字符串,但createDateFromFormat
将会失败。
结合'%E2%80%8E'其边缘似乎被追加到处都是[从左到右的标记](https://en.wikipedia.org/wiki/Left-to-right_mark)不知道为什么边缘添加尽管如此。在这种情况下使用看起来毫无意义 – apokryfos
是您使用从右到左语言的默认语言吗? – apokryfos
不,我用左到右 –