【问题标题】:What does the b in front of string literals do?字符串文字前面的 b 有什么作用?
【发布时间】:2021-07-29 22:19:57
【问题描述】:
$binary = b'Binary string';

将字符串创建为binary 会有什么后果?

我在文档中找不到任何提示。只是在查看 language_scanner 时发现了这个小小的好奇心。

【问题讨论】:

  • 这是added in 5.2.1 - 你使用的是什么版本的PHP?
  • 我使用的是 PHP 5.3.5。但为什么这很重要?
  • @RobertPitt:会吗?是否至少需要将b . 'String' 连接起来?恕我直言,它会简单地抛出Unexpected T_CONSTANT_ENCAPSED_STRING
  • 在 PHP 5.2 中它只会回显二进制字符串:codepad.org/6XGKX8ES,但它确实会在某些版本上抛出该语法错误

标签: php string syntax


【解决方案1】:

这是永远不会发布的 PHP 版本 6 的前向兼容性令牌,它应该具有原生 unicode 支持。

在 PHP6 中,字符串默认为 unicode,函数在 unicode 字符级别对其进行操作。这个“b”表示“二进制字符串”,即一个非unicode字符串,函数在其上进行字节级别的操作。

这在 PHP != 6 中无效,其中所有字符串都是二进制的。

【讨论】:

  • 啊,这很清楚。有趣的是他们做了这个向前兼容的事情。还有其他这样的前向兼容令牌吗?
  • 我不知道除了相关的“(二进制)”转换令牌。
  • 那么我该如何让它消失呢?我需要解码吗?
【解决方案2】:

二进制转换从 5.2.1 开始可用,但直到 6.0 unicode 字符串也生效时才会生效。

这解释了为什么现在在使用 5.2.6 的服务器上这对我来说没有什么特别之处:

<?php
$t = b"hey";
var_dump($t);
//string(3) "hey"

$s = (binary)"hey";
var_dump($s);
//string(3) "hey"
?>

【讨论】:

    【解决方案3】:

    转成字符串

    $binary = preg_replace('/[[:^print:]]/', '', $binary);
    

    【讨论】:

    • 嗨,欢迎来到 Stack Overflow。感谢您抽出宝贵时间并提供答案!但是请注意,问题是关于字符串前面的“b”以及它的含义/创建二进制字符串的意义何在。你的帖子实际上并没有回答这个问题。如果您有一般性评论,请考虑在获得足够声誉后将其发布为 cmets 而不是答案。在此之前,请专注于回答实际问题。
    猜你喜欢
    • 2011-05-01
    • 2021-12-16
    • 2011-09-02
    • 2011-02-05
    • 2011-06-14
    • 2015-06-16
    相关资源
    最近更新 更多