假设(为简单起见)我有一个多字节、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 字符串转换为字节数组的二进制安全方法。