如何将二进制字符串转换为字符串。 json_encode二进制字符串返回false

时间:2018-07-26 10:36:44

标签: php json string

我读过,东西前面的b表示二进制。

我正在从MS DB接收文本字段,列类型为CLOB。 我正在使用Laravel,当我死掉(dd())时,我看到:

b"""
My big text
"""

如果我创建简单的字符串和dd(),则会看到:

"My big text"

问题是json_encode()在此b-String上返回false,但使用简单字符串就可以了。

能否请您告诉我如何使它成为简单的字符串?

P.S。我尝试过unpack()->不成功

编辑:实际上json_encode()与此二进制字符串无关。这是非utf8符号的失败原因。我看到了...(22:45 – 0:15 CEST)...,但是当我做utf8_decode($text)时,我看到了...(22:45?0:15 CEST)...如果我立即尝试json_encode(),它非常完美。

1 个答案:

答案 0 :(得分:0)

PHP没有“二进制”和“非二进制”字符串。它只有字符串,而且它们总是“二进制”的,因为它们就像字节数组一样。 Symfony VarDumper component as a sign that the string is not valid UTF-8.添加了b前缀可以说,UTF-8应该是当今使用的唯一且唯一明智的编码,而且显然Symfony甚至将其他任何东西声明为“二进制”,即非典型文字。

这也是您的json_encode失败的原因。

FWIW,b was a proposed forward compatibility prefix to prepare PHP code for PHP 6,应该具有非常类似于Python的二进制字符串和Unicode字符串。只有PHP 6从未发生过,b前缀仍然没有任何作用。不过,Symfony似乎已经全力以赴,并采用了Python的b"""约定。