Как я могу получить одиночные байты из многобайтовой строковой переменной PHP безопасным двоичным способом?
Допустим (для простоты), что у меня есть многобайтовая, кодированная UTF-8 строковая переменная с 3 буквами (состоящая из 4 байт):
$original = 'Fön';
Поскольку это UTF-8, шестнадцатеричные значения байтов (исключая BOM):
46 C3 B6 6E
Поскольку переменная $original
определена пользователем, мне нужно будет выполнить две вещи:
- получить точное количество байтов (не UTF-8 символов), используемых в строке, и
- способ доступа к каждому отдельному байту (не символу UTF-8).
Я будет иметь тенденцию использовать strlen()
для обработки "1.", и получить доступ к байтам переменной $original
с помощью простого `$original[$byteposition]
Вот так:
<?php
header('Content-Type: text/html; charset=UTF-8');
$original = 'Fön';
$totalbytes = strlen($original);
for($byteposition = 0; $byteposition < $totalbytes; $byteposition++)
{
$currentbyte = $original[$byteposition];
/*
Doesn't work since var_dump shows 3 bytes.
*/
var_dump($currentbyte);
/*
Fails too since "ord" only works on ASCII chars.
It returns "46 F6 6E"
*/
printf("%02X", ord($currentbyte));
echo('<br>');
}
exit();
?>
Это доказывает, что моя первоначальная идея не работает:
- var_dump показывает 3 байта
- printf также терпит неудачу, так как "ord" работает только на ASCII-символах
Как я могу получить одиночные байты из многобайтовой строковой переменной PHP безопасным двоичным способом?
То, что я ищу,-это безопасный двоичный способ преобразования строки UTF-8 в массив байтов.