Что делает b перед строковыми литералами?
$binary = b'Binary string';
Какие последствия это имеет для создания строки как b
Инары?
Я не смог найти ни одного намека на это в документации. Просто нашел это маленькое любопытство, просматривая language_scanner.
2 ответа
Это токен прямой совместимости для никогда не выпускаемой версии PHP6, которая должна была иметь встроенную поддержку юникода.
В PHP6 строки по умолчанию являются Unicode, и функции работают на уровне символов Unicode на них. Это "b" означает "двоичную строку", то есть строку не в кодировке Юникод, в которой функции работают на уровне байтов.
Это не действует в PHP!= 6, где все строки являются двоичными.
Двоичное приведение доступно с 5.2.1, но оно не вступит в силу до 6.0, когда также действуют строки Юникода.
Что объясняет, почему это сейчас не делает ничего особенного для меня на сервере, использующем 5.2.6:
<?php
$t = b"hey";
var_dump($t);
//string(3) "hey"
$s = (binary)"hey";
var_dump($s);
//string(3) "hey"
?>
Convert to string
$binary = preg_replace('/[[:^print:]]/', '', $binary);