[英]PHP Base64 encoding for JSON slash issue
我正在使用Elastic-PHP API 2.0创建Word和PDF文档的索引。 这通常需要将文档的Base64编码作为JSON发送到其Mapper附件插件 。
但是,PHP的Base64在编码的字符串中生成斜杠\\
。 我试图用这种编码构造的JSON无法被Elastic解析:
$json =
'{"content" : "'.addslashes(chunk_split(base64_encode($file_contents))).'"}'
我不希望像某些Stackoverflow帖子中建议的那样删除/替换斜杠,因为它可能在以后的解码中引起问题。
在这种情况下,如何处理Base64编码中的斜杠?
最好不要自己构建JSON字符串,而是让json_encode来完成这项工作,因为它需要使用斜杠。 然后,您不需要加斜杠 :
// create the object
$obj = array(
"content" => chunk_split(base64_encode($file_contents))
);
// encode the object in JSON format
$json = json_encode($obj);
请注意,在编码期间,您将使用chunk_split插入的换行符将被转义,因为JSON不允许字符串中使用非转义的换行符。 如果接收方以正确的方式解码JSON字符串,则将导致上述代码中的$ obj具有值,并且内容带有换行符。
在Elastic Blog帖子中 ,作者甚至删除了base64编码字符串中的任何换行符。 此处显示的Scala代码具有以下功能:
"image" :"${new BASE64Encoder().encode(data).replaceAll("[\\n\\r]", "")}"
这似乎确实表明您也不应使用chunk_split ,因此建议的PHP代码变为:
// create the object
$obj = array(
"content" => base64_encode($file_contents)
);
// encode the object in JSON format
$json = json_encode($obj);
请使用php函数
addslashes()添加斜线或任何特殊字符,要获取斜线,请使用stripslashes()。
谢谢...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.