You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP创建含UTF-16(LE-BOM)十六进制值与字符串的文件

解决方案:PHP生成含UTF-16(LE)带BOM十六进制的文件

核心实现思路

  • 姓名、姓氏类字符串直接保留原编码(建议统一转为UTF-8后处理,避免乱码)
  • 年龄、分数先转为字符串,再编码为带BOM的UTF-16LE格式,最后转换为十六进制值
  • 将所有内容按自定义格式拼接后写入目标文件

完整代码示例

<?php
// 模拟从POST获取输入(实际项目需添加XSS过滤、格式校验等安全处理)
$firstName = $_POST['first_name'] ?? '张三';
$lastName = $_POST['last_name'] ?? '李';
$age = $_POST['age'] ?? '25';
$score = $_POST['score'] ?? '92.5';

// 将字符串转为带BOM的UTF-16LE十六进制
function strToUtf16LeHex($str) {
    // UTF-16LE的BOM标识为0xFFFE
    $bom = "\xFF\xFE";
    // 将UTF-8字符串转成UTF-16LE编码的二进制内容
    $utf16leContent = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8');
    // 拼接BOM后转成十六进制字符串
    return bin2hex($bom . $utf16leContent);
}

// 转换年龄和分数为目标格式
$ageHex = strToUtf16LeHex($age);
$scoreHex = strToUtf16LeHex($score);

// 拼接最终写入内容(格式可按需调整)
$content = "姓名: {$firstName}\n";
$content .= "姓氏: {$lastName}\n";
$content .= "年龄(UTF-16LE带BOM十六进制): {$ageHex}\n";
$content .= "分数(UTF-16LE带BOM十六进制): {$scoreHex}\n";

// 写入文件,扩展名可自定义(如txt、dat等)
file_put_contents('user_info.txt', $content);

echo "文件生成完成!";
?>

错误结果与期望结果对比

以输入年龄为25为例:

  • 错误结果(直接转十六进制):3235(仅为UTF-8字符串的十六进制,无BOM,非UTF-16LE编码)
  • 期望正确结果:fffe32003500(包含UTF-16LE的BOMfffe,2的UTF-16LE编码为3200,5为3500)

以输入分数为92.5为例:

  • 错误结果:39322e35
  • 期望结果:fffe390032002e003500

关键细节提示

  • 必须手动添加UTF-16LE的BOM(0xFFFE),mb_convert_encoding默认不会自动生成BOM
  • 转换编码时需明确源编码为UTF-8,若输入字符串是其他编码(如GBK),需调整mb_convert_encoding的第三个参数
  • 使用bin2hex()将二进制编码内容转为可读的十六进制字符串,确保写入文件后能直接查看目标格式值

内容的提问来源于stack exchange,提问作者Adam Luper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:30:12