PHP-XML数据交互问题

码农天地 -
PHP-XML数据交互问题
语言:PHP问题:1、接收数据的编码是GBK,怎么转成UTF-8?2、simplexml_load_string解析xml格式数据后,如何将结果中的xml对象转换成数组?

第1问,

前置知识:

计算机使用0,1进行数据存储,表示不同的字符需要不同的01排列组合,就出现了编码标准规范,规定编码表和编码方式;例如ASCII编码表中@对应的二进制是0100 0000,这里要注意这个二进制在计算机中是以1个字节存储的,规定怎么样的存储就是编码方式;你也可以规定2个字节来存储,如以1字节来读取2字节就会出现乱码,这就是有时候打开文件出现乱码的原因。编码的知识点可以类比数据结构中的逻辑结构(编码表)和存储结构(编码方式)

使用php自带mb_convert_encoding(content,new,old)函数进行转换,注意old如果不传会自动检测编码,但是不包括GBK,所以old要写入GBK,例如:

 mb_convert_encoding($xml, 'UTF-8', 'GBK,UTF-16LE,ISO-8859-1,UTF-8');

注意:编码问题存在一种情况,就是通过base64编码参数后传给对方,对方又原样返回给你,base64解码后还是编码之前的格式,而不是对方的编码。例如,

"中文"(UTF-8)base64_encode后是 5Lit5paH对方的编码是GBK,原样返回 5Lit5paHbase64_decode后得到的"中文"还是UTF-8,不会是GBK

第2问,

这个问题本质是多维数组,也就是广义表的遍历问题。

不过要注意simplexml_load_string函数解析时,xml头部标明的编码要和数据的编码一致,例如将GBK转UTF-8后,xml报文头部还是标明GBK函数会报错,可以正则匹配替换一下:

preg_replace('/encoding="([a-zA-z0-9]+)"/i','encoding="UTF-8"',$content);

遍历函数如下:

function objToArr($content)

{

  
    if (is_string($content)) return $content;

    if (is_object($content)) $content = (array)$content;

    $tmp = [
        [

        "key" => [],

        "value" => $content

        ]
    ];


    while (!empty($tmp)) {

        $arrs = array_shift($tmp);

        if (is_array($arrs['value'])) {

            foreach ($arrs['value'] as $k => &$arr) {

            //记录深度

            $depth = $arrs['key'];

            array_push($depth, $k);


            //存放需要转换的类型

            $tmp[] = [

                "key" => $depth,

                "value" => is_object($arr) ? (array)$arr : $arr

            ];


            //如果是对象则按深度转为数组

             if (is_object($arr)) {


                $point = &$content;

                foreach ($depth as $v) {

                    $point = &$point[$v];

                }


                $point = (array)$arr;

             }

           }

        }

    }
    return $content;

}

注:思否第一篇,如有不正确的地方,欢迎各位指正!

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

后端php

扩展阅读

加个好友,技术交流

1628738909466805.jpg