PHP 日期(DATE_ATOM) 的 urlencode / urldecode 问题
我正在生成一个需要原子格式日期的谷歌日历查询字符串。
我正在使用 php 5.1.6 和 date(DATE_ATOM) 来生成格式正确的当前日期。因此,例如,在查询的未编码 url 部分有:
start-max=2010-09-02T10:25:58+01:00
我需要对它进行 rawurlencode,它会变成
start-max%3D2010-09-02T11%253A37%253A59%252B01%253A00
现在,如果我对它进行 rawurldecode,它就会变成
start-max=2010-09-02T11%3A39%3A35%2B01%3A00
所以它没有正确解码,谷歌拒绝查询...
如果我对查询进行 rawurldecode日期被解码两次,但原始的“+”被替换为空格(即使它仍然在上面的字符串中编码)
对于 urlencode/urldecode 也是如此:(
关于如何使用此日期对 URL 进行编码/解码的任何想法 吗?
干杯
I am producing a google calendar query string that requires an atom fomatted date.
I am using php 5.1.6, and date(DATE_ATOM) to produce the correctly formatted current date. So, for instance, in the unencoded url part of the query has:
start-max=2010-09-02T10:25:58+01:00
I need to rawurlencode this and it becomes
start-max%3D2010-09-02T11%253A37%253A59%252B01%253A00
Now if I rawurldecode this it becomes
start-max=2010-09-02T11%3A39%3A35%2B01%3A00
So it hasn't decoded properly and google rejects the query...
If I rawurldecode the query twice the date is decoded but the original '+' is replaced with a space ( even though it is still encoded in the above string)
The same is true for urlencode/urldecode :(
Any ideas how to encode / decode the URL with this date format in it?
Cheers
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 PHP 的
http_build_query
:Use PHP's
http_build_query
:无法重现:
所以,可能您正在对值进行 rawurlencode,然后是整个字符串:
...如果您在 get 变量中发送完整的 url,这可能是所需的行为,但更可能的是您遇到了逻辑错误某处。
Cannot reproduce:
So, probably you're rawurlencode'ing the value, and then the whole string:
...which could be desired behavior if you're sending a complete url in an get variable, but more probably you have a logical error somewhere.
您不得在查询字符串中对
=
符号进行编码 - 只有参数值本身和参数名称(如果未修复且可能包含有问题的字符)应为urlencode
d.正确的方法是You must not encode the
=
-symbol in your query string - only the parameter value itself and the parameter name (if it's not fixed and could contain problematic characters) should beurlencode
d. The correct way would be