gpt4 book ai didi

php - 如何以二进制安全的方式从多字节 PHP 字符串变量中获取单个字节?

转载 作者:行者123 更新时间:2023-12-04 16:37:42 25 4
gpt4 key购买 nike

假设(为简单起见)我有一个包含 3 个字母(由 4 个字节组成)的多字节 UTF-8 编码字符串变量:

$original = 'Fön';

因为它是 UTF-8,所以字节的十六进制值是(不包括 BOM):

46 C3 B6 6E

由于 $original 变量是用户定义的,我需要处理两件事:

  1. 获取字符串中使用的确切字节数(不是 UTF-8 字符),并且
  2. 访问每个单独字节(不是 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();
?>

这证明我最初的想法是行不通的:

  1. var_dump 显示 3 个字节
  2. printf 也失败了,因为“ord”只适用于 ASCII 字符

如何以二进制安全的方式从多字节 PHP 字符串变量中获取单个字节?

我正在寻找的是一种将 UTF-8 字符串转换为字节数组的二进制安全方法。

最佳答案

你可以通过解压 utf8_encoded 字符串 $a 来得到一个字节数组:

$a = utf8_encode('Fön');
$b = unpack('C*', $a);
var_dump($b);

“unsigned char”使用格式 C*

引用资料

关于php - 如何以二进制安全的方式从多字节 PHP 字符串变量中获取单个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com