我读过,东西前面的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()
,它非常完美。
答案 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
和"""
约定。