php - 十六进制格式的PHP字符串奇怪的结果
问题描述
我有以下代码在不同的 PHP 版本中产生不同的结果。我是否遗漏了某些东西,或者它是 PHP 7.1.24 中的错误,还是存在某种可能影响此的 PHP 设置?
<?php
$a = "\x43\xbe\xb7\xe8\x30\x00\x10\x00\x00\x00";
$b = "\x4b\x40";
$c = $a . $b;
echo strlen($a) . "<br>";
echo strToHex($a) . "<br>";
echo strlen($b) . "<br>";
echo strToHex($b) . "<br>";
echo strlen($c) . "<br>";
echo strToHex($c) . "<br>";
function strToHex($string) {
$hex = '';
for ($i = 0; $i < strlen($string); $i++) {
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
PHP 7.1.24 输出:
8
43beb7e8300100
2
4b40
10
43beb7e830010000
期望的结果:PHP 5.6.40、PHP 7.1.27、PHP 7.2.16、7.3.3
10
43beb7e830010000
2
4b40
12
43beb7e8300100004b40
示例 #2
<?php
$a = "\xe8\xf1\xf2\xf3\xf4\xf5";
echo strlen($a) . "<br>";
echo strToHex($a) . "<br>";
$b = array(
"\xe8",
"\xf1",
"\xf2",
"\xf3",
"\xf4",
"\xf5"
);
$b = implode("", $b);
echo strlen($b) . "<br>";
echo strToHex($b) . "<br>";
function strToHex($string) {
$hex = '';
for ($i = 0; $i < strlen($string); $i++) {
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
错误的结果:
2
e8f1
2
e8f1
好结果:
6
e8f1f2f3f4f5
6
e8f1f2f3f4f5
解决方案
推荐阅读
- augmented-reality - AR.js:增加稳定性的多个标记?
- javascript - 设置默认单选输入和相应的复选框
- java - 我的缩进有问题吗?
- javascript - 如果对象具有属性,则对对象数组进行排序
- javascript - Javascript validation on hidden field is not working in MVC
- scala - 在Scala中添加不可变集合中的元素时内存不足
- hibernate - 无法映射多对一关系
- kotlin - 初始化构造函数对象列表
- uwp - UWP ListView 为什么我不能重新排序列表
- mysql - 通过 LUA 脚本输出 SQL 表