[edm]搭建自己的邮件服务器后,可以群发大量邮件(一秒发一个)吗?

2015年12月22日星期二 | | 0 评论 |

[edm]搭建自己的邮件服务器后,可以群发大量邮件(一秒发一个)吗?
在服务器上和在个人电脑上都可以搭建吗?搭建的邮件服务器能被其他服务器识别吗?比如能从QQ邮箱发送到我们的邮件服务器吗?

自己建服务器的话就属于玩bulk mailing了。
其实要玩bulk mailing玩出快感的话,就是要一个一个ISP的研究。
10个能搞定3个的时候就可以小high了,搞定5个就可以大high了。

作者:李宇光

搭建自己的邮件服务器后,可以群发大量邮件(一秒发一个)吗?

取决于你发给谁, 如果发给自己服务器的用户,理论上在服务器没爆之前,每秒发多少都可以。 如果是发给qq,163,189,139,sina这些,呵呵,一般来说最多能让你发几百封,然后你的服务器ip会被永久列黑。(当然,如果是完全正常的邮件,正常用户发送的除外)

在服务器上和在个人电脑上都可以搭建吗?
完全可以

搭建的邮件服务器能被其他服务器识别吗?
首先你需要有个域名 (@后面那个),其次你的服务器发送ip要有ptr记录指向你的域名,第三你的域名要有mx记录。 这样别人就知道你是谁了,从QQ邮箱发送到你的邮件服务器就是可以的了。

以上名词不懂的话可以自行百度。
最后作为邮件运营商从业者友情提示一下,不要以为有服务器就能发大量营销(垃圾)邮件。 =。=
-----------
知乎用户,系统架构师,渗透狗,EDM专家
1、首先你需要一个域名,配置MX记录,让别人可以识别你。 
2、其次你需要本地配置邮件服务器,可以接收发送邮件到指定HELO域。
3、然后你需要配置正确对应的域名信息,这样可以正常收发。
4、下一步你需要写的SPF记录,让邮件服务器认识你。
5、配置域名和IP的PTR,让路由器认识你服务器和域名
6、当然以上配置好了,你必须有个固定公网IP,而非虚拟IP或者动态地址
7、去大的SPAM LIST组织移除自己IP,确保通信不被直接丢弃
8、如果要大批量发送给大的服务商,那么你需要很多IP,如果只有一个,你需要知道对方的BLOCK POLICY。测试好阀值
9、QQ可以申请它域互通,网易有诚信邮,可以申请备案的都去申请
10、现在开始你可以尝试开始群发邮件。 
11、内容和标题,页脚需要满足商业群发或机构群发的规则,不然即使备案也会被封

参考: http://www.zhihu.com/question/30383915

[分享]寻找最佳发送时刻—什么时候发送你的邮件活动最合适?

| | 0 评论 |

你应该在想:"什么时候才是发送邮件的最佳时刻?"这要取决于你是谁和你要发给谁了。因为MailChimp的发送时间优化功能是基于电子邮件基因计划里面储存的数十亿条电子邮件地址数据来向用户提供建议的。而这些数据主要是记录了数十亿个邮件地址在接收,打开邮件以及点击链接方面的数据,完全是精确到个体级别的,因此MailChimp给出的发送时间建议完全是根据用户订阅列表上的订阅人的具体情况而定的。

但这并不代表我们不能够从更高的级别去解决这个问题。在这篇文章里,我们将会看一下发送时间优化系统的方法以及解释一下为什么不同的订阅列表会有不同的最佳发送时间。

怎样去解读本文中的图表:我们给每一个收件地址都计算了一个当地的最佳发送时间。"最佳发送时间"是一个计算出来的时间。图表记录了每一个特定最佳发送时间中的电子邮件地址数量所占整体的比例。例如1%邮件地址的最佳发送时刻为早上3点而有6%的邮件地址则为早上9点。在图表中不同的时间加起来的比例总和是100%,因为每一个邮件地址都有其最佳发送时刻。(我会在本文中将发送时间优化系统简称为STO,电子邮件基因计划简称为EGP。)

简单的答案

如果你也跟大多数读者一样,希望能够从更高层面找到什么时刻是最合适发送邮件的简单答案,我将会向你展示EGP中几十亿邮件地址所反映出来的真实情况。为了能让研究结果看起来更简单,我已经将一周分成7天,一天分成好几个时间段来研究。

我们一起看一下一个礼拜中每一天的效果。STO的数据表明,总体来说,工作日是发给大部分订阅人的最佳日子。将周日作为最佳发送日的邮件地址所占比例是最低的,而周一到周五所占的比例都差不多。(译者注:表格订阅人最佳发送日一周比例分布图。)

edm

要知道没有哪一天是有绝对的优势。这也正是我们从数十亿收件箱数据分析中所希望看到的结果。

现在我们已经知道作为最佳的发送时刻,周末明显没有工作日那么受欢迎,但同时这也跟你所发送的内容有关,因为内容会影响到你现在的订阅人。(译者注:周末为最佳发送时刻的订阅人比例分布图,表格中类别依次是:政府,商务与经济,非赢利,艺术,电子商务,零售,习惯。)

edm

我们在本段讨论的都是将周末为最佳发送时刻的订阅人以及邮件地址。打开商务类内容邮件的订阅人比例低于平均水平。在另一方面,消遣娱乐方面的内容更加受欢迎。但值得注意的是,无论在周末发送什么内容,订阅人所占的比例都低于50%,这说明无论发送什么内容,大部分订阅列表中主要的收件人的最佳发送地址还是在工作日。

现在我们看一下一天中不同时间段的情况是怎样的。(译者注:图表为一天中最佳发送时刻订阅人比例分布图。)

edm

从图中我们可以看出来,最佳发送时刻比例峰值出现在收件人当地时间早上10点左右。

除非你有很好的理由,否则不要在收件人当地时间太早的时候发送邮件(例如凌晨3点或4点)。如果你在东海岸,但是如果你的大部分订阅人在加州,你可以考虑设置好发送时间,以避免发到西海岸的时候太早。

但值得注意的是,即使早上10点是峰值,将早上10点作为最佳发送时间的订阅人数量也仅仅占到7%。这说明无论你选择几点发送活动,大部分列表上的订阅人都有其他最佳的发送时间。一天中并不存在这么一个时刻,在这个时刻每个人都停下手中的活并说:"现在是时候去打开邮件看一下了!"这个永远都不会发生的,我爱死这些数据了,他们把这种情况一下否决掉。

如果我们换个角度,从邮件内容的类型来研究,我们会发现实际上早上10点也未必就是收发邮件最佳时刻。例如,我们发现对于爱好类邮件,最佳收发时刻会稍微早一点,大概是在早上8点左右。或者这些收件人喜欢在他们上班前先看一下这一类内容。(译者注:下图为不同类型的邮件内容一天中最佳发送时间的订阅人百分比分布表格。)

edm

你会发现零售和爱好类型邮件会在工作时间外有更多人打开。(但早上依然是收发邮件高峰。)

关键在于受众,而不在于内容

我们已经找到了简单答案(在工作日早上发送邮件比较保险),同时我们也发现这些答案会因为收件人周末以及晚上的偏好和内容的不同而有所变化。这种依赖于邮件内容类型的现象表明我们所获得的这个重量级答案掩饰了更多隐藏在数据深处的有细微差别的真相。

你可能会想是不是邮件内容决定了你打开和阅读邮件的时刻。但对于我来说,事实并不是这样。我会在工作时间阅读零售方面的邮件。(老板,实在对不起!),同时我会躺在家里的沙发上阅读数据科学类的邮件。(亲爱的老婆,实在对不起!)

决定我是否打开,阅读,点击邮件内容的主要原因是我的生活。很多关于发送时间的分析以及有趣的现象都只局限于商务层面,但是为了让你明白应该什么时候发邮件给你的受众,你需要先去了解你的观众,而不是你的内容。他们是谁?他们的生活怎么样?什么时候他们才有空看一下手机里的促销信息?

为了快速举例说明这一点,让我们看一下共和党和民主党在收发邮件最佳时刻的分布差别。(译者注:图表为共和党以及民主党一天中最佳发送时刻分布图。)

edm

你可以看出来,两者之间几乎没啥差别。为什么会这样?因为从宏观上来讲,政治因素不会影响到一个个人查看邮件的安排以及能力。大量数据也并不一定要推翻常识。常识告诉我们,政治因素由于过于宽泛而且次要以至于并不会影响最佳的收发邮件时间。

那么让我们来想一下什么会影响到一个人打开邮件以及阅读邮件的时刻。因为收件人所处的地方以及文化?毕竟,不同国家的人有不同的时间表。让我们看看不同的国家最佳收发时间有什么区别。(译者注:图表为不同国家一天中最佳发送时刻时间分布图)

 edm

在西班牙更多人会选择在早上10点到11点期间看邮件。而在挪威(现在正处于白天时间很长的夏天)最佳发送时刻是在下班以后。另一方面,在埃及,黎明前打开邮件的人更加多。

很明显,地理位置会影响到最佳发送时刻。那年龄会不会也起作用呢?(译者注:图中为不同年龄段的人收发邮件最佳时刻一天中的分布图。)

edm

大学生收发邮件的最佳时刻是在下午1点而不是早上10点这个典型的高峰时间。如果你想得到大学生的作息习惯(特别在夏天),你就不会对这个结果感到惊讶。

年龄肯定是收发邮件最佳时刻的影响因素,我们研究对了方向。但为什么30岁的人不会像大学生一样睡到中午呢?我的情况是因为我的孩子不允许我这么做。但对于大多数人来说,他们需要上班工作!

那跟职业有关系吗?

当我们研究职业之间对于最佳收发时间的影响的时候,我们发现了不同职业间存在最大的差别。在下图,我已经作出了律师,酒吧销售以及护士收发邮件最佳时刻分布图。

edm

酒吧销售就跟大学生一样,一天起的比较晚,所以他们的最佳收发时间在下午一点左右出现峰值。而律师则有两个峰值,分别出现在工作日早上9点以及午餐过后,几乎没有律师的最佳发送时间是在工作时间以外。

而对于护士来说,由于她们的工作时间分布比较广,因此她们的最佳收发时间分布更加广泛并且高峰没那么明显。事实上,很多护士的最佳收发邮件时间是在晚上8点。

那如果我并没有打算发给一个挪威的酒吧销售呢?

上面的图表勾勒出了一个订阅列表最佳发送时间的决定性因素所引起的细微差别。应该有一个更加高级别的更加简单明了的答案才对的,但是由于不同的受众,这个简单的答案还是被细分成好几个答案。所幸的是,MailChimp的STO系统捕捉了所有这些细微差别。因此大胆去尝试STO系统给你的建议把!

而且,上面的结果没有一个让人惊讶。酒吧销售并不想在早上八点查看邮件这个事实太明显了。这是一件好事!这意味着STO(依靠大量数据与数学技术支撑)并不是在玩魔术。你可以做一些假设,然后根据你对你的受众的了解进行A/B测试区验证你的假设。(千万要记住,进行关于发件时间的A/B测试能够提高22%的可能让你的受众查看邮件。)

因此,我希望这篇文章能够给出"我该什么时候发送邮件"这个老掉渣的问题一个答案。请记得:

  1. 在工作日早上发送邮件
  2. 除非你知道一些关于你的观众的情况,你也确实应该知道。如果是这样的话,上一条一般都是错的。
  3. 通过A/B测试获得更好的答案。

祝你发送愉快!

[分享]五款优秀的 Linux 端口扫描工具

2015年12月16日星期三 | | 0 评论 |

端口扫描器是一种检测服务器或主机虚拟端口是开启或关闭的工具。端口允许同一台计算机上的不同应用程序同时共享网络资源。连接本地局域网或互联网的计算机运行着许多不同服务,它们监听着常用或不常用的端口。端口数的范围从0到65535,0到1023的端口数最常用,它们中有许多是为FTP、SSH、HTTP、telnet、DNS和NNTP等服务保留的,1024到49151端口是注册端口,49152到65535则分配给动态或私人端口。Linux上有很多端口扫描器,帮助系统管理员识别和纠正系统漏洞。

Linuxlinks 的这篇文章列出了五款优秀的端口扫描器,供感兴趣的管理员和用户参考。

它们包括:

1. Nmap

Nmap 是一款用于网络浏览或安全审计的免费开源工具。

2. Unicornscan

Unicornscan 是一个新的信息收集引擎,主要用于安全研究和通讯测试,主要特点是精确、灵活而且高效。

3. Zenmap

ZenMap是安全扫描工具NMap的一个官方的图形 用户界面,是一个跨平台的开源应用,不仅初学者容易使 用,同时为高级使用者提供了很多高级特性。频繁的扫描能够被存储,进行重复运行。命令行工具提供了直接与NMap的交互操作。扫描结果能够被存储便于事后 查阅。存储的扫描可以被比较以辨别其异同。最近的扫描结果能够存储在一个可搜索的数据库中。一个典型的ZenMap界面截图如图12.1所示。

4. nast

Network Analyzer Sniffer Tool (nast) 是一个网络包嗅探和局域网分析工具,基于 libnet 和 libpcap 开发。

5. Knocker

Knocker 是一个简单易用的 TCP 端口扫描工具,采用 C 语言编写,用于分析主机上运行的服务。

[分享] Windows 7 PPTP VPN Client Setup

2015年11月7日星期六 | | 0 评论 |

Windows 7 PPTP VPN Client Setup

Let's talk about Windows 7 PPTP VPN client setup in this article, so that you can connect to your home or company's PPTP VPN server later. In addition, you can also use this VPN client to connect to VPN server that supports L2TP/IPSec, SSTP or IKEv2 VPN protocol.

Without wasting more time, let's start to configure Windows 7 PPTP VPN client:

1) Go to Start and click on Control Panel.

2) Proceed to click View network status and tasks in Control Panelwindow.

how to view network status and tasks in Windows 7

3) Network and Sharing Center window will appear, proceed to click on Set up a new connection or network.

set up VPN client in Windows 7

4) Set up a Connection or Network window appears. Choose Connect to a workplace option and click Next.

connect to a workplace in windows 7 win7

5) Proceed to click on Use my Internet connection (VPN) (your computer should have connected to network).

use VPN connection in Windows 7

6) Let's type the IP address or host name of the VPN server computerthat you plans to connect to and also name the connection. Most of the time the IP address is the public WAN IP of your home network's DSL/cable Internet connection if the VPN server is located behind your home router. Click Next.

Note: Check this what is my WAN IP article if not too sure about WAN IP of your home network's Internet connection.

Note: Tick that Don't connect now; just set it up so I can connect lateroption if you are not ready to establish the VPN connection yet. You can also tick other options if it's applicable.

Windows 7 VPN server IP address

7) Type your VPN user name and password, after that click Create.

Note: For safety concern, don't tick Remember this password option.

username password for PPTP VPN

8) Ok! Now the VPN connection is ready to use, just click Connect now to establish the VPN connection if you are ready. If not, click Close and connect it later.

Windows 7 - connect PPTP VPN

9) If you click on network icon (right hand corner of taskbar area), you will notice that new VPN connection item is created and you can clickConnect to establish VPN connection.

Note: You can also right click the VPN connection and click on Propertiesin order to configure this connection in details as needed.

VPN client detailed options

Note: If you open VPN connection properties, you can make further VPN configuration. The security tab also shows you the supported VPN types (Automatic is default setting)

Windows 7 - type of supported VPN

Related Articles:

Virtual Private Network (VPN) Introduction
Simple PPTP VPN Server Setup in Windows XP
Configuring PPTP VPN Client in Windows XP
PPTP VPN Client Setup in Windows Vista

Return to top of "Windows 7 PPTP VPN Client Setup"!!


from: http://www.home-network-help.com/windows-7-pptp-vpn.html

tec. 美国VPS  无限分享 西部数码分销商 便宜VPS   捷飞网络科技论坛  捷飞网络  云主机,VPS 西部数码代理

分享PHP中获取当前页面的URL相关浅析

2015年11月3日星期二 | | 0 评论 |

javascript实现:

top.location.href   顶级窗口的地址
this.location.href 当前窗口的地址

PHP实现:

<?php
#测试网址:     http://localhost/blog/testurl.php?id=5

//获取域名或主机地址 
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址 
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数 
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5

//获取用户代理 
echo $_SERVER['HTTP_REFERER']."<br>"; 

//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
#http://localhost:80/blog/testurl.php?id=5

//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; 
echo dirname($url);
#http://localhost/blog
?>

参考: http://www.cnblogs.com/A-Song/archive/2011/12/14/2288215.html

[转]全国企业工商营业执照网络在线查询入口链接 - 『 生活便利指南』

2015年10月11日星期日 | | 0 评论 |

具体查询办法:
1、网络查询:点击各省市的链接直接进入各地工商局网站-->企业查询-->输入营业执照号码查询;一般只能验证企业的真实性,了解企业基本信息。
2、电话查询:当地"12315"消费者投诉举报专线电话(有的地方不给查);
3、工商局查询:如果您要查询详细企业信息,则必须携带个人身份证件或公司证明材料到工商部门的档案窗口查询。
中华人民共和国国家工商行政管理总局网址:http://www.saic.gov.cn

 

 

华北区

 

北京市

 

东城区 西城区 崇文区 宣武区 朝阳区 海淀区 丰台区 石景山区 门头沟区 房山区 通州区 顺义区 昌平区 大兴区 怀柔区 平谷区 密云县 延庆县

 

天津市

 

工商局和平分局河东分局河西分局南开分局红桥分局河北分局塘沽分局汉沽分局大港分局东丽分局津南分局西青分局北辰分局武清分局宝坻分局宁河分局静海分局蓟县分局开发分局保税分局园区分局

 

河北省

 

石家庄市 唐山市 秦皇岛市 邯郸市 邢台市 保定市 张家口市 承德市 沧州市 廊坊市 衡水市

 

山西省

 

太原市 | 大同市 | 阳泉市 | 长治市 | 晋城市 | 朔州市 | 晋中市 | 运城市 | 忻州市 | 临汾市 | 吕梁市 | 太原经济技术开发区 | 太原高新开发区

 

内蒙古区

呼和浩特市 包头市 乌海市 赤峰市 通辽市 鄂尔多斯市 呼伦贝尔市 兴安盟 锡林郭勒盟 乌兰察布 巴彦淖尔 阿拉善盟 满洲里市 二连浩特市

 

华东区

 

上海市

 

黄浦区 卢湾区 徐汇区 长宁区 静安区 普陀区 闸北区 虹口区 杨浦区 宝山区 闵行区 嘉定区 浦东新区 松江区 金山区 青浦区 南汇区(惠南镇) 奉贤区(南桥镇) 崇明县(城桥镇)

 

江苏省

 

南京|无锡|徐州|常州|苏州|南通|连云港|淮安|盐城|扬州|镇江|泰州|宿迁|苏州工业园区|张家港保税区

 

浙江省

 

杭州市工商局 宁波市工商局 金华市工商局 温州市工商局 台州市工商局 丽水市工商局 绍兴市工商局 衢州市工商局 舟山市工商局 嘉兴市工商局 湖州市工商局 温岭红盾信息网

 

安徽省

 

合肥 芜湖 蚌埠 淮南 马鞍山 淮北 铜陵 安庆 黄山 滁州 阜阳 宿州 巢湖 六安 亳州 池州 宣城

 

福建省

 

福州市 厦门市 三明市 莆田市 泉州市 漳州市 南平市 龙岩市 宁德市 石狮

 

江西省

 

南昌市 九江市 上饶市 景德镇市 新余市 赣州市 宜春市 鹰潭市 抚州市 吉安市 萍乡市

 

山东省

 

济南市 青岛市 淄博市 枣庄市 东营市 潍坊市 烟台市 威海市 济宁市 泰安市 日照市 莱芜市 德州市 临沂市 聊城市 滨州市 菏泽市

 

中南区

 

河南省

 

郑州市 开封市 洛阳市 平顶山市 新乡市 焦作市 安阳市 鹤壁市 濮阳市 三门峡市 济源市 南阳市 商丘市 周口市 许昌市 漯河市 驻马店市 信阳市

 

湖北省

 

十堰市 襄樊市 随州市 孝感市 黄石市 武汉市 黄冈市 鄂州市 咸宁市 潜江市 仙桃市 天门市 荆门市 荆州市 恩施市 神农架 宜昌市

 

湖南省

 

长沙市 株州市 岳阳市 常德市 郴州市 益阳市 怀化市 娄底市 湘潭市 湘西市

 

广东省

 

广州市|深圳市|惠州市|梅州市|汕头市|清远市|韶关市|潮州市|东莞市|珠海市|佛山市|江门市|云浮市|湛江市|揭阳市|茂名市|汕尾市|阳江市|肇庆市|中山市

 

广西区

 

南宁市 柳州市 桂林市 梧州市 北海市 防城港市 钦州市 贵港市 玉林市 百色市 贺州市 河池市 来宾市

 

海南省

 

海口市 三亚市 五指山市 琼海市 儋州市 琼山市 文昌市 万宁市 东方市

 

东北区

 

辽宁省

 

沈阳市 大连市 鞍山市 抚顺市 本溪市 丹东市 锦州市 营口市 阜新市 辽阳市 铁岭市 朝阳市 盘锦市 葫芦岛市

 

吉林省

 

长春市 吉林市 四平市 辽源市 通化市 白山市 松原市 白城市 延边朝鲜自治州

 

黑龙江省

 

哈尔滨市 齐齐哈尔市 鹤岗市 双鸭山市 鸡西市 大庆市 伊春市 牡丹江市 佳木斯市 七台河市 黑河市 绥化地区 大兴安岭地区

 

西北区

 

陕西省

 

西安市 铜川市 宝鸡市 咸阳市 渭南市 延安市 汉中市 榆林市 安康市 商洛市

 

甘肃省

 

兰州市 天水市 嘉峪关 武威市 金昌市 酒泉市 张掖市 庆阳市 平凉市 白银市 定西市 陇南市 临夏州 甘南州

 

青海省

 

西宁市 海东地区 海北藏族自治州 黄南藏族自治州 海南藏族治州 果洛藏族自治州 玉树藏族自治州 海西蒙古族藏族自治州

 

宁夏区

 

银川市 石嘴山市 吴忠市 固原市

 

新疆区

 

阿克苏 昌吉 克拉玛依 博尔塔拉 克孜勒苏 巴音敦楞 哈密 石河子 博乐 伊犁 吐鲁番 塔城 阿勒泰 喀什 高新技术开发区工商局

 

西南区

 

重庆市

 

渝中区 大渡口区 江北区 沙坪坝区 九龙坡区 南岸区 北碚区 万盛区 双桥区 渝北区 巴南区 万州区 涪陵区 黔江区 长寿区(凤城镇) 永川市 合川市 江津市 南川市

 

四川省

 

成都市 德阳市 绵阳市 自贡市 雅安市 乐山市 巴中市 达州市 资阳市 遂宁市 眉山市 泸州市 攀枝花市 泸州市 广元市 阿坝州 凉山州 内江市 南充市 宜宾市 内江市中区 巴中经济开发区 巴中直属分局 南江县 隆昌县 威远县 东兴区 绵阳直属分局 北川县 涪城区 游仙区

 

贵州省

 

贵阳市 六盘水市 遵义市 安顺市 铜仁地区(铜仁市) 毕节地区(毕节市) 黔西南布依族苗族自治州(兴义市) 黔东南苗族侗族自治州 黔南布依族苗族自治州(都匀市)

 

云南省

 

昆明市 曲靖市 玉溪市 保山市 昭通市 思茅地区(思茅市) 临沧地区(临沧县) 丽江地区 文山壮族苗族自治州 红河哈尼族彝族自治州(个旧市) 西双版纳傣族自治州(景洪市) 楚雄彝族自治州(楚雄市) 大理白族自治州(大理市) 德宏傣族景颇族自治州(潞西市) 怒江傈傈族自治州(泸水县六库镇) 迪庆藏族自治州(香格里拉县)

 

西藏区

 

拉萨市 那曲地区(那曲县) 昌都地区(昌都县) 山南地区(乃东县) 日喀则地区(日喀则市) 阿里地区(噶尔县) 林芝地区(林芝县八一镇)

参考: http://bbs.fjbjdd.com/thread-1301-1-1.html

分享php实现JavaScript中escape函数加密与unescape解密

| | 0 评论 |

在json中不支持中文,用它传送中文数据就会出现数据丢失或者乱码,必须在传送前对要发送的字符串进行编码,由于传送过去需要用js进行数据解析,考虑 到js中有unescape函数,故若在php中有个escape函数,对数据进行编码,在客户端用unescape进行 解码,这样就会方便很多。 

先在网上搜索一把,很多用php实现的escape函数,大同小异

  1. function phpescape($str){ 
  2.     preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr); 
  3.     $ar = $newstr[0]; 
  4.     foreach($ar as $k=>$v){ 
  5.         if(ord($ar[$k])>=127){ 
  6.             $tmpString=bin2hex(iconv("GBK","ucs-2",$v)); 
  7.             if (!eregi("WIN",PHP_OS)){ 
  8.                 $tmpString = substr($tmpString,2,2).substr($tmpString,0,2); 
  9.             } 
  10.             $reString.="%u".$tmpString; 
  11.         } else { 
  12.             $reString.rawurlencode($v); 
  13.         } 
  14.     } 
  15.     return $reString; 
  16. }  



这个函数可以很好的工作,但是,也许有新手不理解这个函数的原理(比如我),用起来总是不放心,现在我就来解释一下这个函数的原理。而且我认为,拿别人的代码来复用,好比站在了巨人的肩膀上,但是若不理解别人的代码,迟早要掉到地面上。 

第一句:preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);这个是用正则表达式匹 配字符串中所有的字符,[\x80-\xff]. 匹配的是汉字,\x表示匹配字符的16进制编码,[ ] 是类选择符,"." 表示任意一个字符,这样[\x80-\xff].匹配的是两个字符,其中第一个就是16进制从80到ff的字符,而这恰好就是汉字编码的第一个字符。这样 就能完整的匹配一个汉字。关于unicode中汉字的编码,大家可以到网上搜索一下。同理,[\x01-\x7f]+英文字符串,因为最早的英文是 ASCII编码,编码值小于128,也就是16进制的从01到7f,"+"表示一个或者多个字符,这样[\x01-\x7f]+就能匹配连续多个英文字符 串。 

$ar = $r[0];             //$r[0]里存放是匹配到的数组 
  foreach($ar as $k=>$v) { 
    if(ord($v[0]) < 128)                 //假如字符编码值小于128,说明是个英文字符 
      $ar[$k] = rawurlencode($v);    //直接用rawurlencode编码 
    else 
      $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));    //否则的话用iconv函数把汉字转变成ucs-2编码,也就是unicode编码 
  } 

这个就是关于php中escape函数的一个实现,欢迎大家补充 

有时候可能会遇到PHP版本不同,导致出来结果不同,以致于乱码 
下面这个备用 

php提供的URL编码函数是基于字节的,对由ie的javascript函数escape编码的数据就无能为力了。 
因此在此共享本人的php版的escape/unescape函数 

一个加密一个解密的

  1. function escape($str) { 
  2.   preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r); 
  3.   $ar = $r[0]; 
  4.   foreach($ar as $k=>$v) { 
  5.     if(ord($v[0]) < 128
  6.       $ar[$k] = rawurlencode($v); 
  7.     else 
  8.       $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v)); 
  9.   } 
  10.   return join("",$ar); 
  11.  
  12. function unescape($str) { 
  13.   $str = rawurldecode($str); 
  14.   preg_match_all("/(?:%u.{4})|.+/",$str,$r); 
  15.   $ar = $r[0]; 
  16.   foreach($ar as $k=>$v) { 
  17.     if(substr($v,0,2) == "%u" && strlen($v) == 6) 
  18.       $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4))); 
  19.   } 
  20.   return join("",$ar); 
参考:http://www.cuplayer.com/player/PlayerCodeJS/2014/0711/1429.html

其它:

//编码,编码后为小写
function escape($str){
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr);
$ar = $newstr[0];
foreach($ar as $k=>$v){
   if(ord($ar[$k])>=127){
    $tmpString=bin2hex(iconv("GBK","ucs-2//IGNORE",$v));
    if (!eregi("WIN",PHP_OS)){
     $tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
    }
    $reString.="%u".$tmpString;
   }else{
    $reString.= rawurlencode($v);
   }
}
return $reString;
}

//解码为HTML实体字符
function unescape ($source){ 
$decodedStr = ""; 
$pos = 0; 
$len = strlen ($source); 
while ($pos < $len){ 
   $charAt = substr ($source, $pos, 1); 
         if ($charAt == '%'){ 
    $pos++; 
    $charAt = substr ($source, $pos, 1); 
             if ($charAt == 'u'){ 
     // we got a unicode character 
     $pos++; 
     $unicodeHexVal = substr ($source, $pos, 4); 
     $unicode = hexdec ($unicodeHexVal); 
     $entity = "&#". $unicode . ';'; 
     $decodedStr .= utf8_encode ($entity); 
     $pos += 4; 
             }else{ 
     // we have an escaped ascii character 
     $hexVal = substr ($source, $pos, 2); 
     $decodedStr .= chr (hexdec ($hexVal)); 
     $pos += 2; 
    } 
   }else{ 
    $decodedStr .= $charAt; 
    $pos++; 
   } 

return $decodedStr; 
}


//直接解码为字符串。网上找到的这个版本的函数是解码为HTML实体字符,这是我修改的
function unescape($source){ 
$decodedStr = ""; 
$pos = 0; 
$len = strlen ($source); 
while ($pos < $len){ 
   $charAt = substr ($source, $pos, 1); 
         if ($charAt == '%'){ 
    $pos++; 
    $charAt = substr ($source, $pos, 1); 
             if ($charAt == 'u'){ 
     // we got a unicode character 
     $pos++; 
     $unicodeHexVal = substr ($source, $pos, 4); 
     $unicode = hexdec ($unicodeHexVal); 
     $decodedStr .= u2utf82gb($unicode); 
     $pos += 4; 
             }else{ 
     // we have an escaped ascii character 
     $hexVal = substr ($source, $pos, 2); 
     $decodedStr .= chr (hexdec ($hexVal)); 
     $pos += 2; 
    } 
   }else{ 
    $decodedStr .= $charAt; 
    $pos++; 
   } 

return $decodedStr; 
}
function u2utf82gb($c){
$strphp = "";
if($c < 0x80){
   $strphp .= $c;
}elseif($c < 0x800){
   $strphp .= chr(0xC0 | $c>>6);
   $strphp .= chr(0x80 | $c & 0x3F);
}elseif($c < 0x10000){
   $strphp .= chr(0xE0 | $c>>12);
   $strphp .= chr(0x80 | $c>>6 & 0x3F);
   $strphp .= chr(0x80 | $c & 0x3F);
}elseif($c < 0x200000){
   $strphp .= chr(0xF0 | $c>>18);
   $strphp .= chr(0x80 | $c>>12 & 0x3F);
   $strphp .= chr(0x80 | $c>>6 & 0x3F);
   $strphp .= chr(0x80 | $c & 0x3F);
}
return iconv('UTF-8', 'GB2312', $strphp);
}

参考:http://blog.163.com/[email protected]/blog/static/13982406120105264326456/



所有文章收集于网络,如果有牵扯到版权问题请与本站站长联系。谢谢合作![email protected]