" . self::_arr2xml($data) . ""; } /** * 解析XML内容到数组 * @param string $xml * @return array */ public static function xml2arr($xml) { // 使用simplexml_load_string并禁用外部实体加载 $xmlObject = simplexml_load_string( $xml, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS | LIBXML_NOENT ); if ($xmlObject === false) { throw new \RuntimeException("Failed to parse XML"); } return json_decode(json_encode($xmlObject), true); } /** * XML内容生成 * @param array $data 数据 * @param string $content * @return string */ private static function _arr2xml($data, $content = '') { foreach ($data as $key => $val) { is_numeric($key) && $key = 'item'; $content .= "<{$key}>"; if (is_array($val) || is_object($val)) { $content .= self::_arr2xml($val); } elseif (is_string($val)) { $content .= ''; } else { $content .= $val; } $content .= ""; } return $content; } public static function createNoncestr($length = 32, $str = "") { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } /** * 生成随机编码 * @param integer $size 编码长度 * @param integer $type 编码类型(1纯数字,2纯字母,3数字字母) * @param string $prefix 编码前缀 * @return string */ public static function random(int $size = 10, int $type = 1, string $prefix = ''): string { $numbs = '0123456789'; $chars = 'abcdefghijklmnopqrstuvwxyz'; if ($type === 1) $chars = $numbs; if ($type === 3) $chars = "{$numbs}{$chars}"; $code = $prefix . $chars[rand(1, strlen($chars) - 1)]; while (strlen($code) < $size) $code .= $chars[rand(0, strlen($chars) - 1)]; return $code; } /** * 生成日期编码 * @param integer $size 编码长度 * @param string $prefix 编码前缀 * @return string */ public static function uniqidDate(int $size = 16, string $prefix = ''): string { if ($size < 14) $size = 14; $code = $prefix . date('Ymd') . (date('H') + date('i')) . date('s'); while (strlen($code) < $size) $code .= rand(0, 9); return $code; } /** * 生成数字编码 * @param integer $size 编码长度 * @param string $prefix 编码前缀 * @return string */ public static function uniqidNumber(int $size = 12, string $prefix = ''): string { $time = strval(time()); if ($size < 10) $size = 10; $code = $prefix . (intval($time[0]) + intval($time[1])) . substr($time, 2) . rand(0, 9); while (strlen($code) < $size) $code .= rand(0, 9); return $code; } /** * 文本转码 * @param string $text 文本内容 * @param string $target 目标编码 * @return string */ public static function text2utf8(string $text, string $target = 'UTF-8'): string { [$first2, $first4] = [substr($text, 0, 2), substr($text, 0, 4)]; if ($first4 === chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF)) $ft = 'UTF-32BE'; elseif ($first4 === chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00)) $ft = 'UTF-32LE'; elseif ($first2 === chr(0xFE) . chr(0xFF)) $ft = 'UTF-16BE'; elseif ($first2 === chr(0xFF) . chr(0xFE)) $ft = 'UTF-16LE'; return mb_convert_encoding($text, $target, $ft ?? mb_detect_encoding($text)); } /** * 数据解密处理 * @param mixed $data 加密数据 * @param string $skey 安全密钥 * @return string */ public static function encrypt($data, string $skey): string { $iv = static::random(16, 3); $value = openssl_encrypt(serialize($data), 'AES-256-CBC', $skey, 0, $iv); return static::enSafe64(json_encode(['iv' => $iv, 'value' => $value])); } /** * 数据加密处理 * @param string $data 解密数据 * @param string $skey 安全密钥 * @return mixed */ public static function decrypt(string $data, string $skey) { $attr = json_decode(static::deSafe64($data), true); return unserialize(openssl_decrypt($attr['value'], 'AES-256-CBC', $skey, 0, $attr['iv'])); } /** * Base64Url 安全编码 * @param string $text 待加密文本 * @return string */ public static function enSafe64(string $text): string { return rtrim(strtr(base64_encode($text), '+/', '-_'), '='); } /** * Base64Url 安全解码 * @param string $text 待解密文本 * @return string */ public static function deSafe64(string $text): string { return base64_decode(str_pad(strtr($text, '-_', '+/'), strlen($text) % 4, '=')); } /** * 压缩数据对象 * @param mixed $data * @return string */ public static function enzip($data): string { return static::enSafe64(gzcompress(serialize($data))); } /** * 解压数据对象 * @param string $string * @return mixed */ public static function dezip(string $string) { return unserialize(gzuncompress(static::deSafe64($string))); } }