繁体   English   中英

PHP Base64编码可解决JSON斜线问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM