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

PHP如何将XML中非UTF-8编码转UTF-8及实现反向转换

PHP实现XML实体与UTF-8字符互转方案

正向转换:XML实体转UTF-8明文

你遇到的是XML中十六进制字符实体的解码场景,PHP可通过以下两种常用方案实现转换:

  • 方案1:使用html_entity_decode(兼容性更好)
// 原始XML字符串
$rawStr = ""Schwäbisch Hall Unicorns"";
// 两次解码:第一次还原转义的&符号,第二次转换所有XML实体为UTF-8字符
$utf8Str = html_entity_decode(
    html_entity_decode($rawStr, ENT_QUOTES | ENT_XML1, 'UTF-8'),
    ENT_QUOTES | ENT_XML1,
    'UTF-8'
);
// 输出结果:"Schwäbisch Hall Unicorns"

参数说明:

  • ENT_QUOTES:同时解码单引号和双引号实体

  • ENT_XML1:按照XML 1规范处理实体,适配XML场景

  • 明确指定UTF-8作为输出编码,避免不同PHP版本的默认编码差异导致乱码

  • 方案2:使用mb_convert_encoding(写法更简洁)

$rawStr = ""Schwäbisch Hall Unicorns"";
$utf8Str = mb_convert_encoding($rawStr, 'UTF-8', 'HTML-ENTITIES');

该方案会自动识别所有十进制、十六进制的HTML/XML实体,直接转换为UTF-8字符。

反向转换:UTF-8明文转XML实体

如果需要将UTF-8字符转换回XML实体格式,可使用以下方案:

  • 方案1:通用XML实体编码
$utf8Str = ""Schwäbisch Hall Unicorns"";
$xmlStr = htmlentities($utf8Str, ENT_QUOTES | ENT_XML1, 'UTF-8');
// 输出结果包含对应实体,兼容XML规范
  • 方案2:输出与原始格式完全一致的十六进制实体
$utf8Str = "Schwäbisch Hall Unicorns";
// 所有非ASCII字符转为十六进制数字实体
$xmlStr = preg_replace_callback('/[^\x00-\x7F]/u', function($matches) {
    return '&#x' . dechex(mb_ord($matches[0])) . ';';
}, $utf8Str);
// 额外将&转义为&,匹配原始XML的转义层级
$xmlStr = str_replace('&', '&', $xmlStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:07