在PHP中,什么是二进制字符串(b'xxxx')?

lov*_*ing 15 php

是什么b''("二进制串")在PHP语句的意思$str=b'xxxxxx';

pav*_*ium 16

PHP 语言参考描述了unicode字符串和本机二进制字符串之间的区别,用b'this表示是二进制字符串'

似乎不是表示二进制数的方法.

符号"从PHP 5.2.1开始可用.但是,它只会在PHP 6.0.0起生效"


Gra*_*ble 10

二进制字符串是在PHP 5.2.1中引入的,但预计仅从PHP 6开始生效.它试图区分Unicode和二进制字符串.前者是新的字符串格式,后者是当前格式,但改为"b"符号.

您可能知道,PHP 6已被放弃,字符串格式没有改变."b"符号只是那个时代的遗物.

'foobar' === b'foobar'; // true
Run Code Online (Sandbox Code Playgroud)


所以现在(PHP 5和7),二进制字符串是唯一的字符串格式.字符编码(可以是多字节)由文本编辑器,Web浏览器等在"上层"进行管理.您可以将二进制字符串视为由完整的0-255字节值范围组成的字符串.

具有非打印字符等的字符串可以在PHP中像任何其他字符串一样进行操作,但是您将获得显示它的垃圾.还有一些字符具有特殊含义:\0在C和SQL中标记字符串终止,有控制字符等.因此,只要在PHP之外使用它们,您就可能遇到麻烦.

例如,random_bytes()生成这样的字符串.

  • 我遇到了 JSON 问题。但是 PHP 随机返回带有 'b' 的字符串,有时不返回。这就是为什么有时我的 JSON 没有呈现,有时它是..这让我发疯了!如果有人在这种情况下,知道 JSON 不处理这个“b”可能会很有用 (2认同)

jit*_*ter -9

$number = decbin(59);
echo $number . "\n"; //111011
$number = bindec($number);
echo $number . "\n"; //59
Run Code Online (Sandbox Code Playgroud)

decbin(int $number):返回包含给定数字参数的二进制表示形式的字符串。

bindec(string $bstring):返回 bstring 参数中二进制数的十进制等效值。