我在使用PHP base64_decode函数解码包含cookie的XML片段时遇到了一些奇怪的问题:
一旦我们尝试在浏览器中运行相同的代码,解码的XML似乎包含大量UTF-16字符,其中散布着预期XML标记的片段。例如:
<了createSession \ u000f \ u0013Y ...
正如您可能期望的那样,我们最终得到一个异常:将此字符串传递给SimpleXMLElement constructor时,无法将字符串解析为XML ... 错误。
进一步的信息:
有没有人之前遇到过这样的事情,或者知道可能导致这种情况的原因是什么?
答案 0 :(得分:1)
啊哈!事实证明,当在浏览器中运行时,PHP值自动URL decoded,这意味着base64编码文本中的任何“+”都被空格替换。在调用base64_decode
固定内容之前添加这行代码:
$tmp = str_replace(' ', '+', $value);