0

0

HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能

不言

不言

发布时间:2018-05-22 14:38:11

|

3878人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了html5实现分享到微信好友朋友圈qq好友qq空间微博二维码功能的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

这是分享按钮:






 这是js调用代码:


这个就是分享js文件NativeShare.js:

!function(e,t){
"object"==typeof exports&&"object"==typeof module?module.exports=t():
"function"==typeof define&&define.amd?define([],t):
"object"==typeof exports?exports["NativeShare.js"]=t():
e["NativeShare.js"]=t(
)}
(this,function(){
return function(e){
function t(r){
if(n[r])return n[r].exports;
var o=n[r]={i:r,l:!1,exports:
{
}
};
return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};
return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{
configurable:!1,enumerable:!0,get:r})},
t.n=function(e){
var n=e&&e.__esModule?function(){
return e.default}:function(){return e};
return t.d(n,"a",n),n},
t.o=function(e,t){
return Object.prototype.hasOwnProperty.call(e,t)
},t.p="",t(t.s=0)
}
([function(e,t,n){"use strict";
function r(){}
function o(e){
var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r,n=document.getElementsByTagName("script")[0],o=document.createElement("script");
o.src=e,o.async=!0,n.parentNode.insertBefore(o,n),o.onload=t
}
function i(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");
for(var n=Object(e),r=1;r1&&void 0!==arguments[1]&&arguments[1],n=[];
for(var r in e)t?n.push(r+"="+encodeURIComponent(e[r])):n.push(r+"="+e[r]);
return n.join("&")}
function u(e){
var t=document.createElement("a");
return t.href=e,t.hostname}
function l(e){
Oe?Oe.content=e:document.head.insertAdjacentHTML("beforeend",'')
}
function f(e){
je?je.href=e:document.head.insertAdjacentHTML("beforeend",'')
}
function s(e){
document.title=e
}
function p(e)
{
return c({share_id:924053302,url:_e.encode(e.link),
title:_e.encode(e.title),
description:_e.encode(e.desc),
previewimageUrl:_e.encode(e.icon),image_url:_e.encode(e.icon)})
}
function h(){
a((se?"mqqapi://share/to_fri?src_type=web&version=1&file_type=news":"mqqapi://share/to_fri?src_type=isqqBrowser&version=1&file_type=news")+"&"+p(Se))
}
function b(){
a((se?"mqqapi://share/to_fri?file_type=news&src_type=web&version=1&generalpastboard=1&shareType=1&cflag=1&objectlocation=pasteboard&callback_type=scheme&callback_name=QQ41AF4B2A":"mqqapi://share/to_qzone?src_type=isqqBrowser&version=1&file_type=news&req_type=1")+"&"+p(Se))
}
function y(){
var e={url:Se.link,title:Se.title,pic:Se.icon,desc:Se.desc};
location.href=" 
function d(){
var e={url:Se.link,title:Se.title,pic:Se.icon};
location.href=" 
function w(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function v(e,t,n){
return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e
}
function g(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function m(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t}
function _(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,
{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function O(e,t,n){
return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
function j(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function S(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function k(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function P(e,t,n){
return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e
}
function C(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function q(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function T(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function E(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function D(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function x(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function Q(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function M(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function N(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function A(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function U(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function B(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function R(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function W(e,t){
if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function I(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function z(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function F(e,t){
if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function L(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function Z(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function J(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function H(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function X(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function G(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function K(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function V(e,t){
if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")
}
function Y(e,t){
if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function $(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function ee(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function te(e,t){
if(!e)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function ne(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
function re(e,t){
if(!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function oe(e,t){
if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return!t||"object"!=typeof t&&"function"!=typeof t?e:t
}
function ie(e,t){
if("function"!=typeof t&&null!==t)
throw new TypeError("Super expression must either be null or a function, not "+typeof t);
e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),
t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)
}
Object.defineProperty(t,"__esModule",{value:!0});
var ae,
ce=navigator.userAgent,
ue=/(iPad).*OS\s([\d_]+)/.test(ce),
le=/(iPod)(.*OS\s([\d_]+))?/.test(ce),
fe=!ue&&/(iPhone\sOS)\s([\d_]+)/.test(ce),
se=ue||le||fe,pe=/(Android);
?[\s\/]+([\d.]+)?/.test(ce),
he=/micromessenger/i.test(ce),
be=/QQ\/([\d\.]+)/.test(ce),
ye=/Qzone\//.test(ce),
de=/MQQBrowser/i.test(ce)&&!he&&!be,
we=/UCBrowser/i.test(ce),
ve=/mobile.*baidubrowser/i.test(ce),
ge=/SogouMobileBrowser/i.test(ce),
me=/baiduboxapp/i.test(ce),
_e={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode:function(e){
var t,n,r,o,i,a,c,u="",l=0;
for(e=_e._utf8_encode(e);l>2,i=(3&t)<<4|n>>4,a=(15&n)<<2|r>>6,
c=63&r,
isNaN(n)?a=c=64:isNaN(r)&&(c=64),
u=u+this._keyStr.charAt(o)+this._keyStr.charAt(i)+this._keyStr.charAt(a)+this._keyStr.charAt(c);
return u
},
_utf8_encode:
function(e){
e=e.replace(/\r\n/g,"\n");
for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),
t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),
t+=String.fromCharCode(63&r|128))}return t
}
},
Oe=document.querySelector("meta[name=description]"),
je=document.querySelector("link[rel*=icon]"),
Se={link:location.href,title:function(){return document.title}(),
desc:function(){
return Object(Oe).content||""}(),
icon:function(){
return Object(je).href||location.protocol+"//"+location.hostname+"/favicon.ico"}(),
from:"",success:r,fail:r,trigger:r},
ke=function(){
function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};
i(this._shareData,e),
this._config.syncDescToTag&&l(this._shareData.desc),
this._config.syncIconToTag&&f(this._shareData.icon),
this._config.syncTitleToTag&&s(this._shareData.title)}},
{
key:"setConfig",
value:function(){
var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};
i(this._config,e)}},{key:"getConfig",
value:function(){
return i({},this._config)}}]),e}(),
Ce=Pe,
qe=function(){
function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments[1];
this.setShareData(t);
var n=this.getShareData(),
r=this.constructor.commamdMap[String(e).toLowerCase()];
browser.app.share({title:n.title,description:n.desc,url:n.link,img_url:n.icon,from:n.from,to_app:r})}}]),t}(Ce);
Te.commamdMap=(ae={},
v(ae,"wechattimeline",8),
v(ae,"wechatfriend",1),
v(ae,"qqfriend",4),
v(ae,"qzone",3),
v(ae,"weibo",11),
v(ae,"copyurl",10),
v(ae,"more",5),
v(ae,"generateqrcode",7),
v(ae,"default",void 0),ae);
var Ee,De=Te,
xe=function(){function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"default",
t=arguments[1];
this.setShareData(t);
var n=this.getShareData(),
r=this.constructor.commamdMap[String(e).toLowerCase()];
ucbrowser.web_shareEX?ucbrowser.web_shareEX(JSON.stringify({title:n.title,content:n.desc,sourceUrl:n.link,imageUrl:n.icon,source:n.from,target:r})):ucbrowser.web_share(title,desc,link,r,"",from,"")}}]),t}(Ce);
Qe.commamdMap=(
Ee={},
O(Ee,"wechattimeline","kWeixinFriend"),
O(Ee,"wechatfriend","kWeixin"),
O(Ee,"qqfriend","kQQ"),
O(Ee,"qzone","kQZone"),
O(Ee,"weibo","kSinaWeibo"),
O(Ee,"default",void 0),Ee);
var Me,Ne=Qe,Ae=function(){
function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"default",
t=arguments[1];
this.setShareData(t);
var n=this.getShareData(),
r=this.constructor.commamdMap[String(e).toLowerCase()];
ucweb.startRequest("shell.page_share",[n.title,n.desc,n.link,r,"",n.from,n.icon])}}]),t}(Ce);
Ue.commamdMap=(Me={},P(Me,"wechattimeline","WechatTimeline"),
P(Me,"wechatfriend","WechatFriends"),
P(Me,"qqfriend","QQ"),P(Me,"qzone","Qzone"),
P(Me,"weibo","SinaWeibo"),
P(Me,"default",""),Me);
var Be=Ue,
Re=function(){
function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments[1];
if(this.setShareData(t),"weibo"!==(e=String(e).toLowerCase()))
throw"qqfriend"===e?h():"qzone"===e&&b(),
new Error("the browser may not support command "+e+"!");
d()}}]),t}(Ce),et=$e,
tt=function(){
function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],arguments[1]);
this.setShareData(e),mqq.ui.showShareMenu()}},{
key:"init",
value:function(){var e=this;o(" 
function(){
var t=e._shareData;
mqq.ui.setOnShareHandler(function(e){
mqq.ui.shareMessage({back:!0,share_type:e,title:t.title,desc:t.desc,share_url:t.link,
image_url:t.icon,sourceName:t.from},
function(e){
0===e.retCode?t.success(e):t.fail(e)})})})}}]),t}(Ce),
rt=nt,
ot=function(){
function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],arguments[1]);
this.setShareData(e),mqq.ui.showShareMenu()}},{key:"init",value:function(){var e=this;o(" 
function e(e,t){
for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],arguments[1]);
this.setShareData(t);
for(var n=this.getShareData(),r=[],o=[],i=[],a=[],c=0;c<5;c++)
r.push(n.icon),
a.push(n.link),
o.push(n.title),
i.push(n.desc);
QZAppExternal.setShare(
function(t){0!=t.code&&(e.hasSomethingWrong=!0)},{type:"share",image:r,title:o,summary:i,shareURL:a})}},{key:"setShareData",value:function(e){
try{this.call("default",e)}catch(e){}}},{key:"init",value:function(){
var e=this;o(" 
function(){
e.call("default")})}}]),t}(Ce),
ft=lt,
st=function(){
function e(e,t){
for(var n=0;n

相关推荐:

WOMBO
WOMBO

使用AI创作美丽的艺术品

下载

立即学习前端免费学习笔记(深入)”;

HTML5实现微信jssdk录音播放语音的实例

HTML5 video视频字幕的使用和制作方法

相关文章

QQ
QQ

QQ是腾讯在中国开发的一款社交应用,用户可用QQ在手机和电脑上聊天。QQ截止目前拥有超过8.2亿用户,是中国最多人使用的社交应用程序之一,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

90

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

15

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

10

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

6

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

7

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

25

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

28

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.9万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 10.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号