Что делает 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);
Другие вопросы по тегам