e-s*_*shi 3 php byte bytearray utf-8 multibyte
让我们说(为简单起见),我有一个多字节,UTF-8编码的字符串变量,带有3个字母(由4个字节组成):
$original = 'Fön';
Run Code Online (Sandbox Code Playgroud)
由于是UTF-8,因此字节的十六进制值为(不包括BOM):
46 C3 B6 6E
Run Code Online (Sandbox Code Playgroud)
由于$original变量是用户定义的,因此我需要处理两件事:
我倾向于使用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();
?>
Run Code Online (Sandbox Code Playgroud)
这证明我的最初想法不起作用:
如何以二进制安全的方式从多字节PHP字符串变量中获取单字节?
我正在寻找一种将UTF-8字符串转换为字节数组的二进制安全方法。
您可以通过解压缩utf8_ecoded字符串$ a获得字节数组:
$a = utf8_encode('Fön');
$b = unpack('C*', $a);
var_dump($b);
Run Code Online (Sandbox Code Playgroud)
使用C *格式表示“无符号字符”
参考文献
| 归档时间: |
|
| 查看次数: |
9975 次 |
| 最近记录: |