PHP - Зачитать строку из файла

Строка в файле \x86
Считываем и помещаем в переменную $test_string.
Не получается привести переменную к виду "\x86"
var_damp($test_string) / string(6) "\x86 "
var_damp("\x86") / string(1) "�"
Необходимо для декодирования строк.

Вопрос простой, но все мои манипуляции с двойными кавычками, окончились неудачей.
Cтрока набранная руками в коде, к примеру "\x68\x9A\x9A\x68\x08\x33\x72\x51\x05\x33\x58\xA5\x11\x40\x16" - обрабатывается декодирующей программой.
Аналогичная строка полученная из файла не обрабатывается.
Управляющие последовательности в ней не срабатывают и представляются в виде '\x68\x9A\x9A\x68\x08\x33\x72\x51\x05\x33\x58\xA5\x11\x40\x16'


Ответы (1 шт):

Автор решения: Sergey Tatarincev

может все же наоборот? "\x86" это символ с кодом 86.

Чтобы получить именно эту строку, необходимо косую экранировать:

$var = "\\x86";

Для преобразования строковой записи кода символа в сам символ можете восползоваться следующим методом:

<?php
$var = "\\x77 просто буквы \\x5A"; // пример строки
var_dump($var);
preg_match_all('/\\\x([0-9A-F]{2})/', $var, $matches); // Используя данное регулярное выражение выбираем все конструкции вида \xDD 
var_dump($matches);  // Выведем все совпадения
foreach($matches[1] as $val){ // почему именно [1] читайте https://www.php.net/manual/ru/function.preg-match-all.php
  echo $val."='".hex2bin($val)."'\n"; // выведем строковое представление и сам символ
}
?>

Если потребуется заменить искомые коды в строке, используйте флаг PREG_OFFSET_CAPTURE и в цикле заменяйте matches[0][i] на hex2bin(matches[1][i])

→ Ссылка