<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Rick 's BLOG</title>
<subtitle>Rick 's BLOG</subtitle>
<link href="https://www.rickw.cn/"></link>
<link href="https://www.rickw.cn/feedatom/2" rel="self" type="application/atom+xml"></link>
<updated>2026-06-21T03:38:15+08:00</updated>
<logo>https://www.rickw.cn/images/logos.gif</logo>
<author><name>rick</name>
<email>redcheek@gmail.com</email>
</author>
<id>urn:uuid:b4ac7ffb-122a-c942-88f5-ddaaaf4a756d</id>
<entry>
<title>Sublime Text 4 Build 4180 安装激活</title>
<link href="https://www.rickw.cn/blogview/337"></link>
<id>urn:uuid:8d438472-5e49-b43e-bca0-ddca2721a835</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[Sublime&nbsp;Text4&nbsp;目前最新版本是&nbsp;BUILD&nbsp;4180，发布日期&nbsp;2024年8月6日(6&nbsp;Aug&nbsp;2024)<br />
<br />
之前的激活方式【<a target="_blank" href="/blogview/273">&nbsp;Sublime&nbsp;Text&nbsp;4&nbsp;下载&amp;激活(4169)&nbsp;</a>】已经失效。<br />
<br />
<h2>最新版本的激活方式如下：</h2><br />]]></summary>
<content type="html">Sublime&amp;nbsp;Text4&amp;nbsp;目前最新版本是&amp;nbsp;BUILD&amp;nbsp;4180，发布日期&amp;nbsp;2024年8月6日(6&amp;nbsp;Aug&amp;nbsp;2024)&lt;br /&gt;
&lt;br /&gt;
之前的激活方式【&lt;a target=&quot;_blank&quot; href=&quot;/blogview/273&quot;&gt;&amp;nbsp;Sublime&amp;nbsp;Text&amp;nbsp;4&amp;nbsp;下载&amp;amp;激活(4169)&amp;nbsp;&lt;/a&gt;】已经失效。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;最新版本的激活方式如下：&lt;/h2&gt;&lt;br /&gt;
&lt;br /&gt;
激活的操作方式和之前的激活方式基本差不多，详细操作方式可以参考之前的文章。&lt;br /&gt;
主要区别是&lt;strong&gt;【处理许可证验证逻辑】&lt;/strong&gt;查找替换的内容有变更。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;新的查找替换内容如下：&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;查找：807905000f94c2&lt;br /&gt;
替换：c6410501b20090&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
其它的操作不变。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;h3&gt;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/274&quot;&gt;Sublime&amp;nbsp;Text4&amp;nbsp;安装中文语言包&lt;/a&gt;&amp;nbsp;&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;最后这里提供备用下载地址&lt;/h2&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-1432870660-abc432&quot;&gt;&amp;nbsp;Sublime&amp;nbsp;Text4&amp;nbsp;Build4180&amp;nbsp;X64原版下载&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-1432870627-589f2f&quot;&gt;&amp;nbsp;Sublime&amp;nbsp;Text4&amp;nbsp;Build4180&amp;nbsp;X64补丁下载&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
</content>
</entry>
<entry>
<title>【宇轩】ASP Web Server服务器 V2.1</title>
<link href="https://www.rickw.cn/blogview/299"></link>
<id>urn:uuid:cb81f266-f983-62d2-2ba0-eaa477f811a3</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[2023-12-09&nbsp;更新V2.1<br />
1，增加支持无参数调用Request.QueryString的方式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接无参调用&nbsp;Request.QueryString&nbsp;会返回Url中?号后面的原始查询字符串。<br />
2，改善了对runt&nbsp;server的script标签的兼容性。标签属性有双引号和无双引号的情况都支持。<br />
3，增加设置选项，在出错时可以输出服务器变量信息。<br />]]></summary>
<content type="html">2023-12-09&amp;nbsp;更新V2.1&lt;br /&gt;
1，增加支持无参数调用Request.QueryString的方式。&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;直接无参调用&amp;nbsp;Request.QueryString&amp;nbsp;会返回Url中?号后面的原始查询字符串。&lt;br /&gt;
2，改善了对runt&amp;nbsp;server的script标签的兼容性。标签属性有双引号和无双引号的情况都支持。&lt;br /&gt;
3，增加设置选项，在出错时可以输出服务器变量信息。&lt;br /&gt;
&lt;br /&gt;
2.0版本参考&lt;a target=&quot;_blank&quot; href=&quot;/blogview/294&quot;&gt;【宇轩】ASP&amp;nbsp;WEB服务器&lt;/a&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
程序下载：&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-987188230-519721&quot;&gt;【宇轩】ASP&amp;nbsp;Web&amp;nbsp;Server服务器&amp;nbsp;V2.1.rar&lt;/a&gt;&lt;br /&gt;
</content>
</entry>
<entry>
<title>【宇轩】ASP WEB服务器</title>
<link href="https://www.rickw.cn/blogview/294"></link>
<id>urn:uuid:ff866fa6-95dd-3670-a9fb-a78b70e775c8</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[最近整理资料，需要查看一些老的asp程序的数据信息。在网上找了几个简易aspweb程序，都没有成功。<br />
在网上还找到了自己十几年写的紫雨轩aspweb&nbsp;server程序，也一样有问题没有成功。<br />
在仓库里面找了一下发现源代码还没有丢，就翻出来修改了一下。<br />
我这边备份的几个asp博客程序、asp内容管理程序已经能正常运行，查看数据信息。<br />
<br />]]></summary>
<content type="html">最近整理资料，需要查看一些老的asp程序的数据信息。在网上找了几个简易aspweb程序，都没有成功。&lt;br /&gt;
在网上还找到了自己十几年写的紫雨轩aspweb&amp;nbsp;server程序，也一样有问题没有成功。&lt;br /&gt;
在仓库里面找了一下发现源代码还没有丢，就翻出来修改了一下。&lt;br /&gt;
我这边备份的几个asp博客程序、asp内容管理程序已经能正常运行，查看数据信息。&lt;br /&gt;
&lt;br /&gt;
更新记录：&lt;br /&gt;
2023-12-06&amp;nbsp;【宇轩】ASP&amp;nbsp;Web&amp;nbsp;Server&amp;nbsp;V2.0  &lt;br /&gt;
1，增加支持&amp;nbsp;UTF-8&amp;nbsp;charset&amp;nbsp;和&amp;nbsp;codepage。&lt;br /&gt;
2，修正了几种特殊情况下&amp;nbsp;Server&amp;nbsp;Side&amp;nbsp;Include&amp;nbsp;异常的问题。&lt;br /&gt;
3，修正了文件中含有&amp;nbsp;Unix格式换行符时的处理异常问题。&lt;br /&gt;
4，增加了的JScript脚本语言的支持。&lt;br /&gt;
5，增加了对&amp;nbsp;runat&amp;nbsp;server的script标签的支持。&lt;br /&gt;
6，优化了&amp;nbsp;Server.MapPath&amp;nbsp;的路径判断，会根据网站根目录和文件当前目录自动判断。&lt;br /&gt;
7，修正了有些情况下ASP输出图片验证码的问题。&lt;br /&gt;
8，优化了出错时的错误信息显示。&lt;br /&gt;
&lt;br /&gt;
2005-03-22&amp;nbsp;V1.0&lt;br /&gt;
1，完整实现&amp;nbsp;response,request对象。【上传文件，图片验证码&amp;nbsp;测试通过】&amp;nbsp;&lt;br /&gt;
2，增强了对中文文件名的处理&amp;nbsp;&lt;br /&gt;
3，实现session对象。&amp;nbsp;&lt;br /&gt;
4，增加多重缺省文件的设置。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
软件运行截图：&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/12/06/OApPuI.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
错误信息的显示效果：&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/12/06/OApvvc.jpg&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
ASP博客程序运行画面：&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/12/06/OApydr.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
软件下载：&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-986271028-e235c9&quot;&gt;【宇轩】ASPWebServerV2.0.rar&lt;/a&gt;&lt;br /&gt;
</content>
</entry>
<entry>
<title>在CodeIgniter4实现前端切换风格模版功能，并允许风格模版只实现部分页面</title>
<link href="https://www.rickw.cn/blogview/291"></link>
<id>urn:uuid:99612612-ec3c-b5a2-2042-d48a76f930c5</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[准备给博客系统增加风格模版功能，同时还需要允许新的风格模版按需实现部分页面即可。<br />
<br />
一种简单的实现方式是，直接全局切换风格模版目录，这样的缺点是要求新的风格模版必须实现所有页面。<br />
<br />
而更优雅的实现方式是：允许风格模版按需实现页面，新的风格模板没有实现的页面自动使用默认模版页面。<br />]]></summary>
<content type="html">准备给博客系统增加风格模版功能，同时还需要允许新的风格模版按需实现部分页面即可。&lt;br /&gt;
&lt;br /&gt;
一种简单的实现方式是，直接全局切换风格模版目录，这样的缺点是要求新的风格模版必须实现所有页面。&lt;br /&gt;
&lt;br /&gt;
而更优雅的实现方式是：允许风格模版按需实现页面，新的风格模板没有实现的页面自动使用默认模版页面。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;这里介绍两种改造实现的方法：&lt;/strong&gt;&lt;br /&gt;
&lt;h2&gt;1，增加新的全局函数&amp;nbsp;templateview()&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&amp;nbsp;templateview()&amp;nbsp;的函数原型和功能对应CodeIgniter4框架自身的函数&amp;nbsp;view()。&lt;br /&gt;
&lt;font color=&quot;red&quot;&gt;区别就是&amp;nbsp;templateview&amp;nbsp;函数会自动处理风格问题。&lt;/font&gt;&lt;br /&gt;
函数代码添加到APP\Common.php中：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_ztET7VebKhah')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_ztET7VebKhah);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_ztET7VebKhah&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateview&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=[],&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;[]){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;currentControl&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateview&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
这里的全局函数只是提供了一个调用封装，我们会将实际实现添加到BaseController中。&lt;br /&gt;
这里用到了在全局函数中访问当前控制器实例的方法，可以参考之前的文章实现&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/278&quot;&gt;CodeIgniter4中如何在view或者helper函数中访问当前控制器对象&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
在BaseController中添加如下实现代码：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_DUHCw6KCWg7K')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_DUHCw6KCWg7K);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_DUHCw6KCWg7K&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;视图模版的路径&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewPath&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;APPPATH&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'Views/templates/'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//当前风格模版名称&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$template&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateview&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=[],&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;[]){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;根据风格模版获取视图文件，不存在时返回默认模版文件&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fileExt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pathinfo&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;PATHINFO_EXTENSION&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;empty(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$fileExt&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;?&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.php'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(empty(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'default/'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//默认视图文件&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;viewPath&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;template&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'/'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;is_file&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;template&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'/'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//风格模版的视图文件&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'default/'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$viewfile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//默认视图文件&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
这样主要工作就算完成了。&lt;br /&gt;
其它需要调整的地方&lt;br /&gt;
&lt;ol type=&quot;1&quot;&gt;&lt;br /&gt;
&lt;li&gt;在Controller的初始化代码中给&amp;nbsp;$this-&amp;gt;template&amp;nbsp;属性赋值。&lt;br /&gt;
&lt;li&gt;控制器中调用&amp;nbsp;view()&amp;nbsp;函数的地方，如果需要使用风格模版功能，改为调用&amp;nbsp;$this-&amp;gt;templateview()函数或者全局函数&amp;nbsp;templateview()&lt;br /&gt;
&lt;li&gt;在视图文件中如果调用其它视图的地方如&amp;lt;?=view('header')?&amp;gt;&amp;nbsp;改为&amp;nbsp;&amp;lt;?=templateview('header')?&amp;gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;第二种实现方式&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;直接替换框架的&amp;nbsp;view()&amp;nbsp;函数。&lt;br /&gt;
函数代码添加到APP\Common.php中完成函数替换：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_foDW8rtyfMOz')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_foDW8rtyfMOz);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_foDW8rtyfMOz&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=[],&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;[]){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;currentControl&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateview&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
再就是BaseController中代码，和第一部分的代码基本一样，只有templateview函数代码不同，新的代码参考如下&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_ODOTGGMM4DXc')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_ODOTGGMM4DXc);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_ODOTGGMM4DXc&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateview&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=[],&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;[]){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;templateFile&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//这里要增加判断视图文件是否存在，如果不存在，则认为不是风格视图文件。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//直接使用原始的视图文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;if(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;is_file&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;viewPath&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//这里不能再调用view函数，把view函数代码拷贝过来。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$renderer&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;\Config\Services&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;renderer&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;\Config\View&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$saveData&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;saveData&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;array_key_exists&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'saveData'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$saveData&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;(bool)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'saveData'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'saveData'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$renderer&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setData&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'raw'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$view&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$options&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$saveData&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
在Controller的初始化代码中给&amp;nbsp;$this-&amp;gt;template&amp;nbsp;属性赋值。&lt;br /&gt;
这样子就可以了。其它的地方基本不需要修改。&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
</content>
</entry>
<entry>
<title>在php中实现安全的用户登录、Cookie中保存登录状态(remember me)</title>
<link href="https://www.rickw.cn/blogview/285"></link>
<id>urn:uuid:20bf2c7b-b000-d7cc-4e3b-32788e1febf6</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[使用安全的方式实现用户登录，并在Cookie中保存登录状态，记住我（remember&nbsp;me）功能。<br />
<br />
比较天真的实现方式：将登录凭证、权限信息等保存到Cookie中。<br />
真的是很可怕，本站之前使用的老ASP博客系统就是这么实现的。<br />
最终导致系统被黑，网站被挂马。。。。。<br />]]></summary>
<content type="html">使用安全的方式实现用户登录，并在Cookie中保存登录状态，记住我（remember&amp;nbsp;me）功能。&lt;br /&gt;
&lt;br /&gt;
比较天真的实现方式：将登录凭证、权限信息等保存到Cookie中。&lt;br /&gt;
真的是很可怕，本站之前使用的老ASP博客系统就是这么实现的。&lt;br /&gt;
最终导致系统被黑，网站被挂马。。。。。&lt;br /&gt;
&lt;br /&gt;
这次开发的新系统考虑到这种教训，采用了比较安全的实现方式。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;1，在用户密码的存储和验证方面使用了安全性较高的实现方案。&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&amp;nbsp;具体实现方式在之前的文章中有详细介绍。&lt;br /&gt;
a.&amp;nbsp;对密码强度进行要求。&amp;nbsp;参考&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/275&quot;&gt;&amp;nbsp;简单实现js密码强度检测，友好的html&amp;nbsp;css样式提示&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;font color=&quot;red&quot;&gt;密码要求至少8位，大小写字母数字标点符合至少包含三种。&lt;/font&gt;&lt;br /&gt;
保证密码的基本安全性。&lt;br /&gt;
&lt;br /&gt;
b.&amp;nbsp;&amp;nbsp;对密码采用安全的hash加密存储。参考&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/276&quot;&gt;在PHP程序中实现安全的用户密码保存-加密存储和登录验证&lt;/a&gt;&lt;br /&gt;
密码安全存储是为了应对数据泄漏风险。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2，在登录时进行暴力破解预防&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;最基本的两项就是&amp;nbsp;验证码&amp;nbsp;和&amp;nbsp;密码试错次数限制。&lt;br /&gt;
验证码功能可以参考之前的文章&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/280&quot;&gt;在CodeIgniter4中集成谷歌验证码&amp;nbsp;reCaptcha&amp;nbsp;V2&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
关于密码错误次数的限制，网上有一些天真的利用&amp;nbsp;Session&amp;nbsp;记录错误次数的实现代码。&lt;br /&gt;
那样是完全没有效果的。&lt;br /&gt;
&lt;br /&gt;
错误次数可以在数据库中记录，也可以在Memcache，redis等缓存中记录。&lt;br /&gt;
CodeIgniter4有缓存模块，我们这里可以直接利用它自带的缓存模块实现&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_5NE7eymsDcRV')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_5NE7eymsDcRV);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_5NE7eymsDcRV&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;判断是否超出了最大错误次数&lt;br /&gt;&amp;nbsp;*&amp;nbsp;2小时内错误5次&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_CheckErrors&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'passErr_'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)??&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;记录错误次数&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_addErrors&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'passErr_'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;??&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;7200&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//2小时&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;获取当前错误次数&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_getErrors&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'passErr_'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$username&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)??&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;(int)&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
根据用户名来记录密码错误次数信息，在登录时先判断错误次数。次数超过时直接报错。&lt;br /&gt;
然后进行登录验证，密码失败时，调用辅助函数记录次数。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3，安全的使用Cookie保存登录状态&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;首先，绝对不能将用户凭证权限等信息保存到Cookie中。&lt;br /&gt;
我们可以在Cookie中保存一个没有实际意义token标识。同时将这个token标识，过期信息保存到数据库中和用户关联。&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_wb0lcQRMmOT4')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_wb0lcQRMmOT4);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_wb0lcQRMmOT4&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$length&amp;nbsp;生成的Token字符长度&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;返回生成的Token字符串&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_generateToken&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;int&amp;nbsp;$length&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bin2hex&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;random_bytes&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$length&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
在用户登录成功后通过上面的辅助函数生成一个随机token。&lt;br /&gt;
&lt;br /&gt;
在用户下次访问时直接获取token值，然后从数据库中查询是否有关联用户。&lt;br /&gt;
如果找到用户，先判断是否过期，然后实现自动登录，并从数据库中获取用户权限等信息。&lt;br /&gt;
&lt;br /&gt;
如果考虑更严格安全一点，也可以在数据库中记录用户的IP地址，UserAgent等信息，要求完全匹配才给登录。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;4，自动登录Token的注销&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;在用户进行密码修改后要主动从数据中删除token值，避免安全漏洞。&lt;br /&gt;
&lt;br /&gt;
在用户&amp;nbsp;点击&amp;nbsp;退出登录&amp;nbsp;后，也要主动注销token值，同时注销Session。&lt;br /&gt;
这一点很重要，可以保证用户在公共场合登录帐号后能安全退出。&lt;br /&gt;
在用户退出后不会给Cookie劫持或者Session劫持攻击机会。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;5，最后，敏感操作要重新验证用户密码&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;如用户修改密码、邮箱、绑定手机号等情况，需要重新验证用户，以保证安全。&lt;br /&gt;
&lt;/div&gt;</content>
</entry>
<entry>
<title>在CodeIgniter4中集成谷歌验证码 reCaptcha V2</title>
<link href="https://www.rickw.cn/blogview/280"></link>
<id>urn:uuid:ff12fa04-7974-48f9-bb40-13f788ee69b4</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[为什么要在网站上使用验证吗？主要还是安全方面的原因。<br />
通过验证码可以防止一些机器人和程序自动化的操作，如发送垃圾信息等。<br />
验证码还可以防止暴力破解攻击，特别是在登录或密码重置等敏感操作时。<br />
通过添加验证码，也可以增加攻击的难度和时间，从而减少攻击成功的可能性。<br />
<br />]]></summary>
<content type="html">为什么要在网站上使用验证吗？主要还是安全方面的原因。&lt;br /&gt;
通过验证码可以防止一些机器人和程序自动化的操作，如发送垃圾信息等。&lt;br /&gt;
验证码还可以防止暴力破解攻击，特别是在登录或密码重置等敏感操作时。&lt;br /&gt;
通过添加验证码，也可以增加攻击的难度和时间，从而减少攻击成功的可能性。&lt;br /&gt;
&lt;br /&gt;
国内大厂的验证码都是收费的，之前腾讯有免费的防水墙（验证码）服务，现在也停了。&lt;br /&gt;
国际大厂免费的验证码服务，谷歌算是比较有名气的了。&lt;br /&gt;
&lt;br /&gt;
我们这边选择的是&amp;nbsp;reCaptcha&amp;nbsp;V2&amp;nbsp;版本的。&lt;br /&gt;
在系统集成之前，你需要先去谷歌官网申请&amp;nbsp;reCaptcha&amp;nbsp;的帐号密钥。&lt;br /&gt;
因为网络因素，这个是无法直接访问的，请大家参考网上的申请教程。&lt;br /&gt;
我们这里只介绍在CodeIgniter4系统中集成的方法。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;首先，在&amp;nbsp;App\Config\App.php&amp;nbsp;中增加&amp;nbsp;密钥的配置设置。&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;/**&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;谷歌验证码配置&lt;br /&gt;
&amp;nbsp;*&amp;nbsp;reCaptcha&amp;nbsp;V2&lt;br /&gt;
&amp;nbsp;*/&lt;br /&gt;
public&amp;nbsp;$reCaptchaV2&amp;nbsp;=&amp;nbsp;['htmlkey'&amp;nbsp;=&amp;gt;&amp;nbsp;&quot;***这里是网页端的密钥======&quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;apikey&quot;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;&quot;=======这里是后端api的密钥=====&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;然后，增加两个辅助函数，辅助函数可以写到&amp;nbsp;App\Common.php&amp;nbsp;中。&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;第一个辅助函数，是在网页中显示验证码组件。&lt;br /&gt;
注意这里引用的js脚本路径，这个路径是可以在国内正常使用的。&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_rYg4lsADjOg6')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_rYg4lsADjOg6);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_rYg4lsADjOg6&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;form_verifycode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$name&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;validatecode&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//获取扩展配置&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$cfg&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'App'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$cfg&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;reCaptchaV2&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'htmlkey'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;];&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'&amp;lt;script&amp;nbsp;src=&quot;https://www.recaptcha.net/recaptcha/api.js&quot;&amp;nbsp;async=&quot;&quot;&amp;nbsp;defer=&quot;&quot;&amp;gt;&amp;lt;/script&amp;gt;'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'&amp;lt;script&amp;nbsp;type=&quot;text/javascript&quot;&amp;gt;'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;var&amp;nbsp;verifyCallback_&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$name&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&amp;nbsp;=&amp;nbsp;function(response)&amp;nbsp;{&quot;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;document.getElementById(\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$name\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;).value&amp;nbsp;=&amp;nbsp;response;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;};&amp;lt;/script&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;lt;div&amp;nbsp;class=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;recaptcha\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;nbsp;data-callback=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;verifyCallback_$name\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;nbsp;data-sitekey=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;gt;&amp;lt;/div&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;lt;input&amp;nbsp;type=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;hidden\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;nbsp;name=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$name\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;nbsp;id=\&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$name\&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$txt&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
第二个辅助函数，php后端检查验证码正确性的。&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_Qk6m7qYflYcQ')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_Qk6m7qYflYcQ);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_Qk6m7qYflYcQ&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;verify_Code&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$code&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(empty(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$code&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//获取扩展配置&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$cfg&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'App'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//使用方法&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$post_data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'secret'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$cfg&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;reCaptchaV2&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'apikey'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'response'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;post_curls&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'https://www.recaptcha.net/recaptcha/api/siteverify'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$post_data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$vd&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;json_decode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$data&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;empty(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$vd&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'success'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;])&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;最后是使用方式了&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;1，在视图文件中可以按如下方式调用。&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_z7ikjseuCLxK')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_z7ikjseuCLxK);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_z7ikjseuCLxK&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;td&amp;nbsp;align&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;right&quot;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bgcolor&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;#FFFFFF&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;验证码：&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;td&amp;nbsp;bgcolor&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;#FFFFFF&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;form_verifycode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;td&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
2，在后端接受到post数据后，可以按下面方式验证&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_4UvrYcta17Y2')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_4UvrYcta17Y2);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_4UvrYcta17Y2&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;if(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;verify_Code&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$rndcode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;showErrors&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'验证码错误，请完成人机验证。'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;</content>
</entry>
<entry>
<title>CodeIgniter4中如何在view或者helper函数中访问当前控制器对象</title>
<link href="https://www.rickw.cn/blogview/278"></link>
<id>urn:uuid:aa6e7d91-65e3-7699-e41d-5aa3c56e0f6d</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[在CodeIgniter4中我们如果将一些共通的基础数据保存到了当前控制器实例中。<br />
就有可能会遇到需要在view视图中访问当前控制器实例的情况（需要访问基础数据）。<br />
也有可能会需要在helper辅助函数中访问当前控制器实例。<br />
<br />
这里我们可以通过扩展核心库的方式实现。<br />]]></summary>
<content type="html">在CodeIgniter4中我们如果将一些共通的基础数据保存到了当前控制器实例中。&lt;br /&gt;
就有可能会遇到需要在view视图中访问当前控制器实例的情况（需要访问基础数据）。&lt;br /&gt;
也有可能会需要在helper辅助函数中访问当前控制器实例。&lt;br /&gt;
&lt;br /&gt;
这里我们可以通过扩展核心库的方式实现。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;首先，我们扩展CodeIgniter\CodeIgniter&amp;nbsp;类来记录当前控制器实例，并提供访问接口&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&amp;nbsp;实现代码如下（当前代码还包含了之前文章介绍的&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;/blogview/271&quot;&gt;SQL执行数量功能的实现&lt;/a&gt;）&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_D2Mjuwxyz7Nq')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_D2Mjuwxyz7Nq);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_D2Mjuwxyz7Nq&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;namespace&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;App\Libraries&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;use&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;CodeIgniter\Events\Events&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;use&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;CodeIgniter\CodeIgniter&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;BaseCodeIgniter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;扩展核心类实现&amp;nbsp;SQL&amp;nbsp;执行数的统计功能&lt;br /&gt;&amp;nbsp;*&amp;nbsp;提供当前控制器实例访问接口&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;CodeIgniter&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;extends&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;BaseCodeIgniter&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@var&amp;nbsp;int|null&amp;nbsp;&amp;nbsp;变量SQL执行次数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;protected&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$sql_queries&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;当前的控制器对象实例&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$current_Control&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;函数&amp;nbsp;统计SQL执行次数&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;collectDBQuery&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;sql_queries&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;initialize&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;initialize&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//增加扩展初始化代码&amp;nbsp;&amp;nbsp;注册SQL统计函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Events&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'DBQuery'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'collectDBQuery'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;增加替换&amp;nbsp;&amp;nbsp;sql_queries&amp;nbsp;标签&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;displayPerformanceMetrics&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$output&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//&amp;nbsp;替换&amp;nbsp;&amp;nbsp;sql_queries&amp;nbsp;标签&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$output&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;str_replace&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'&amp;#123;sql_queries}'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;sql_queries&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$output&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;displayPerformanceMetrics&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$output&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;保存当前的Controller实例对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;Controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;protected&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;createController&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;current_Control&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;createController&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;current_Control&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;增加接口函数，获取当前控制器实例&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getCurrentControl&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;current_Control&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;然后通过服务配置文件，将我们扩展的核心类注册到系统中&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;需要修改的文件是&amp;nbsp;App\Config\Services.php&lt;br /&gt;
在文件中添加如下函数，完成注册：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_hJGliRpoPW85')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_hJGliRpoPW85);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_hJGliRpoPW85&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;扩展&amp;nbsp;CodeIgniter核心类&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;CodeIgniter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;codeigniter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(?&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;App&amp;nbsp;$config&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bool&amp;nbsp;$getShared&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$getShared&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;static::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getSharedInstance&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'codeigniter'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;??=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;App&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::class);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;new&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;\App\Libraries\CodeIgniter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;最后是访问方式&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;首先在&amp;nbsp;app\Common.php&amp;nbsp;中添加全局的辅助函数：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_0bv5VXDv5LkT')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_0bv5VXDv5LkT);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_0bv5VXDv5LkT&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;获取当前的控制器实例&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;currentControl&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$app&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Config\Services&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;codeigniter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$app&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getCurrentControl&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;然后你就可以通过全局函数&amp;nbsp;&lt;font color=&quot;red&quot;&gt;currentControl&lt;/font&gt;&amp;nbsp;在任意位置访问当前控制器实例了。&lt;/strong&gt;&lt;br /&gt;
&lt;/div&gt;</content>
</entry>
<entry>
<title>在PHP程序中实现安全的用户密码保存-加密存储和登录验证</title>
<link href="https://www.rickw.cn/blogview/276"></link>
<id>urn:uuid:25d460bf-5b42-e33b-45c0-5a2df6497262</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[<div class="txt_main">在网络世界中，用户密码的安全问题日益受到关注，用户身份验证和密码保护变得愈发重要。<br />
不用说明码保存密码这种低级问题，从2004年MD5碰撞漏洞以来在系统中使用md5保存密码都是不可以想象的灾难。<br />
<strong>采用md5、sha1甚至是加盐的md5、sha256都已经是不安全的了</strong><br />
目前有四种仍然安全的密码哈希算法：<strong><br />
<ul><li>&nbsp;Argon2&nbsp;<li>&nbsp;bcrypt&nbsp;<li>&nbsp;scrypt&nbsp;<li>&nbsp;PBKDF2&nbsp;</ul></ol></strong></div><br />]]></summary>
<content type="html">&lt;div class=&quot;txt_main&quot;&gt;在网络世界中，用户密码的安全问题日益受到关注，用户身份验证和密码保护变得愈发重要。&lt;br /&gt;
不用说明码保存密码这种低级问题，从2004年MD5碰撞漏洞以来在系统中使用md5保存密码都是不可以想象的灾难。&lt;br /&gt;
&lt;strong&gt;采用md5、sha1甚至是加盐的md5、sha256都已经是不安全的了&lt;/strong&gt;&lt;br /&gt;
目前有四种仍然安全的密码哈希算法：&lt;strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&amp;nbsp;Argon2&amp;nbsp;&lt;li&gt;&amp;nbsp;bcrypt&amp;nbsp;&lt;li&gt;&amp;nbsp;scrypt&amp;nbsp;&lt;li&gt;&amp;nbsp;PBKDF2&amp;nbsp;&lt;/ul&gt;&lt;/ol&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;一些PHP系统的生成环境可以没有安装PECL包，这种情况下&amp;nbsp;scrypt&amp;nbsp;哈希加密算法&amp;nbsp;就无法使用。&lt;br /&gt;
如果可能的话建议优先使用&amp;nbsp;scrypt&amp;nbsp;哈希加密算法。&lt;br /&gt;
&lt;br /&gt;
除此之外我们建议优先使用&amp;nbsp;bcrypt，更重要的是PHP提供了内置函数支持。&lt;br /&gt;
我们可以直接使用&lt;strong&gt;&lt;font color=&quot;red&quot;&gt;&amp;nbsp;password_hash()&lt;/font&gt;&amp;nbsp;&amp;nbsp;和&amp;nbsp;&lt;font color=&quot;red&quot;&gt;&amp;nbsp;password_verify()&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;使用bcrypt需要注意它的两点限制：&lt;/strong&gt;&lt;br /&gt;
&lt;ol type=&quot;1&quot;&gt;&lt;li&gt;它最多只支持72个字符，超过的字符会被截断。&lt;li&gt;如果字符串中含有NUL（\0）字符时会被截断&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;对于一般网站来说这都不是问题，用户密码通常不会超过72个字符。&lt;br /&gt;
网页端输入也不可能会出现NUL（\0）字符。&lt;/strong&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;实际实现代码&lt;/h2&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;用户密码的加密：&lt;br /&gt;
CodeIgniter4本身有提供加密库，我这里直接使用了CodeIgniter4自带的加密库。&lt;br /&gt;
也可以使用专业的&amp;nbsp;php-encryption&amp;nbsp;加密库。&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_6poyTPGgAK2w')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_6poyTPGgAK2w);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_6poyTPGgAK2w&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;Hash密码，并加密Hash值。返回加密后的结果。&lt;br /&gt;&amp;nbsp;*&amp;nbsp;返回值可以直接保存到数据库中。&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$password&amp;nbsp;用户输入的密码&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;返回加密后的Hash值&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_hashAndEncrypt&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$password&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_hash&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$password&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;PASSWORD_DEFAULT&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;is_string&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$encrypter&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;\Config\Services&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;encrypter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;base64_encode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$encrypter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;encrypt&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//php-encryption&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//return&amp;nbsp;Crypto::encrypt($hash,&amp;nbsp;$aesKey);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
在用户登录时验证密码是否正确，这里进行函数封装：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_d8v23AUEr57d')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_d8v23AUEr57d);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_d8v23AUEr57d&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;解密数据库中的Hash值并验证密码是否正确&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$password&amp;nbsp;用户输入的密码&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$ciphertext&amp;nbsp;数据库保存的加密hash值&lt;br /&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;返回验证是否成功&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_decryptAndVerify&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$password&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$ciphertext&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$encrypter&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;\Config\Services&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;encrypter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$encrypter&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;decrypt&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;base64_decode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$ciphertext&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;//php-encryption&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//$hash&amp;nbsp;=&amp;nbsp;Crypto::decrypt($ciphertext,&amp;nbsp;$aesKey);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;if&amp;nbsp;(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;is_string&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;))&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;password_verify&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$password&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$hash&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;加密算法库下载&lt;/h2&gt;&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-983290804-24dd37&quot;&gt;专业加密算法库&amp;nbsp;php-encryption-2.4.0.zip&lt;/a&gt;&lt;br /&gt;
</content>
</entry>
<entry>
<title>简单实现js密码强度检测，友好的html css样式提示</title>
<link href="https://www.rickw.cn/blogview/275"></link>
<id>urn:uuid:0cbf0ec8-0411-7137-9d86-418e5f4179b7</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[从网站安全方面考虑，许多网站会采取强制措施来限制密码的强度，以保障网站安全。<br />
这些措施包括要求密码包含特定数量的大小写字母、数字和特殊字符，以及限制密码长度。<br />
<br />
今天我们这里提供一种简单有效的密码强度css提示效果实现方案，效果如下：<br />
<img src="https://ooo.0x0.ooo/2023/11/28/OrQbsD.gif" border="0" style="max-width:90%;height:auto;"  alt="按此在新窗口打开图片" onmouseover="this.style.cursor='hand';" onclick="showImage(this);" /><br />]]></summary>
<content type="html">从网站安全方面考虑，许多网站会采取强制措施来限制密码的强度，以保障网站安全。&lt;br /&gt;
这些措施包括要求密码包含特定数量的大小写字母、数字和特殊字符，以及限制密码长度。&lt;br /&gt;
&lt;br /&gt;
今天我们这里提供一种简单有效的密码强度css提示效果实现方案，效果如下：&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/11/28/OrQbsD.gif&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;实现代码如下：&lt;/h1&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&lt;strong&gt;CSS样式代码：&lt;/strong&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_E5wPFHOzhlvR')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_E5wPFHOzhlvR);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_E5wPFHOzhlvR&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;style&amp;nbsp;type&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;text/css&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;br /&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_wrap&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;128px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;15px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;vertical&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;align&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;middle&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;overflow&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;visible&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;border&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;radius&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;5px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item1&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#cccccc;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item2&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#cccccc;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item3&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#cccccc;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item4&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#cccccc;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_text&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#aaa;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;bold&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;left&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;5px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;webkit&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;transition&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;.2s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;transition&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;.2s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;left&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;2px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;%;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;30px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;border&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;radius&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;5px&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;left&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;webkit&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;transition&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&amp;nbsp;.2s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;visisility&amp;nbsp;.1s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;transition&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&amp;nbsp;.2s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;visisility&amp;nbsp;.1s&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;active&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#FF4B47;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item2&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;active&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#F9AE35;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item3&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;active&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#2DAF7D;}&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbar_item4&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;active&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;green&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;}&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;js代码&lt;/strong&gt;&lt;br /&gt;
下面是简单的实现逻辑，主要检测密码长度，字符种类数。&lt;br /&gt;
要求：大写字母、小写字母、标点符合、数字至少包含三种。密码不少于8个字符。&lt;br /&gt;
强度值达到&amp;nbsp;3&amp;nbsp;即可满足条件。&lt;br /&gt;
代码依赖jQuery。&lt;br /&gt;
&lt;br /&gt;
如果需要更复杂的密码强度检测，可以使用开源js库&amp;nbsp;zxcvbn&amp;nbsp;【&amp;nbsp;dropbox&amp;nbsp;开发的一个JavaScript密码强度估算库】。&lt;br /&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_RDW6xBfvo9wV')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_RDW6xBfvo9wV);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_RDW6xBfvo9wV&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;script&amp;nbsp;type&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;el&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;el&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'color'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pwstrength&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;let&amp;nbsp;len&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;len&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;===&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;len&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;&amp;lt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(/[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;z&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(/[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Z&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(/[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(/(.[^&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;zA&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;Z0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;])/&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'#password'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;keyup&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;let&amp;nbsp;that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;let&amp;nbsp;len&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;that&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_text'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pwstrength&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;that&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;len&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;===&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;||&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;===&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(function()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'空'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'#aaa'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item1'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item2'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item3'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item4'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'弱'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'#FF4B47'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item1'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item2'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item3'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item4'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'中'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'#F9AE35'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;==&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item1'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item2'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item3'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item4'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'高'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'#2DAF7D'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'.pbar_item'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(function()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'active'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;changeText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;pbText&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'安全'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'green'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;/script&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;最后记住一条安全准则：永远不要相信客户端提交的数据&lt;/h1&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&lt;strong&gt;虽然我们在前端检查了密码强度，在后端我们还是需要再次检查一面。&lt;/strong&gt;&lt;br /&gt;
php检测代码如下：&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;window.attachEvent(&quot;onload&quot;,function (){AutoSizeDIV('CODE_pJPadChZuQFZ')})&lt;/script&gt;&lt;table width=&quot;98%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;code_head&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;&lt;a href=&quot;javascript:CopyText(document.all.CODE_pJPadChZuQFZ);&quot;&gt;[复制到剪贴板] &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class=&quot;code_main&quot; id=&quot;CODE_pJPadChZuQFZ&quot; style=&quot;overflow-y:auto;overflow-x:auto;width: 98%;min-height:40px;max-height:500px;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;*&amp;nbsp;返回强度0&amp;nbsp;--&amp;nbsp;4&lt;br /&gt;&amp;nbsp;*/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;form_pwstrength&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;string&amp;nbsp;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;):&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;int&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;empty(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;)&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;&amp;lt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;8&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;/[0-9]/&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;/[a-z]/&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;/[A-Z]/&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;preg_match&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;/[^a-zA-Z0-9]/&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&amp;nbsp;){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;++;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$lv&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;在&amp;nbsp;CodeIgniter4&amp;nbsp;中我们可以把这个函数放到&amp;nbsp;helper&amp;nbsp;中。&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;如果前端使用了&amp;nbsp;zxcvbn&amp;nbsp;库，后端也可以使用&amp;nbsp;zxcvbn-php&amp;nbsp;库。&lt;/strong&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;一些文件下载&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-983290801-562881&quot;&gt;前端js库文件&amp;nbsp;zxcvbn.js&lt;/a&gt;&lt;br /&gt;
&lt;img src=&quot;/images/download.gif&quot; align=&quot;absmiddle&quot; /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://dl.rickw.cn/f/20272120-983290795-6d940a&quot;&gt;后端php库文件&amp;nbsp;zxcvbn-php-1.3.1.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
</content>
</entry>
<entry>
<title>Sublime Text4 安装中文语言包</title>
<link href="https://www.rickw.cn/blogview/274"></link>
<id>urn:uuid:af993f7c-1d8d-fb6d-7c09-1dfeefa9c17f</id>
<updated>2026-06-21T03:38:15+08:00</updated>
<author><name>rick</name>
</author>
<summary type="html"><![CDATA[<strong>Sublime&nbsp;Text4&nbsp;安装完成后默认是英文的，如果不习惯使用英文，可以安装中文语言包。</strong><br />
<br />
安装步骤如下：<br />
<br />
<br />]]></summary>
<content type="html">&lt;strong&gt;Sublime&amp;nbsp;Text4&amp;nbsp;安装完成后默认是英文的，如果不习惯使用英文，可以安装中文语言包。&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
安装步骤如下：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol type=&quot;1&quot;&gt;&lt;br /&gt;
&lt;li&gt;安装&amp;nbsp;Sublime&amp;nbsp;Text&amp;nbsp;4&amp;nbsp;成功后，点击菜单&amp;nbsp;【Tools】&amp;nbsp;-&amp;gt;&amp;nbsp;【Install&amp;nbsp;Package&amp;nbsp;Control】；&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&lt;font color=&quot;red&quot;&gt;&lt;strong&gt;注意：安装包管理控制器需要等待一会，点击可能出现没有反应的情况，耐心等待弹窗即可！&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;strong&gt;在看到弹窗之前不要进行其它操作，看到弹出后点击【确定】按钮；&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/11/28/OrGxXX.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;strong&gt;点击菜单&amp;nbsp;【Preferences】&amp;nbsp;-&amp;gt;&amp;nbsp;【Package&amp;nbsp;Control】-&amp;gt;&amp;nbsp;选择【Install&amp;nbsp;Package】;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;txt_main&quot;&gt;&lt;img src=&quot;https://ooo.0x0.ooo/2023/11/28/OrGFzt.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;strong&gt;然后在弹出的输入框中输入关键词【ChineseLocalzations】，即可看到中文安装包，点击即可安装！&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/11/28/OrGhPx.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;strong&gt;安装完成后如下：&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;https://ooo.0x0.ooo/2023/11/28/OrGilj.png&quot; border=&quot;0&quot; style=&quot;max-width:90%;height:auto;&quot;  alt=&quot;按此在新窗口打开图片&quot; onmouseover=&quot;this.style.cursor='hand';&quot; onclick=&quot;showImage(this);&quot; /&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;/ol&gt;</content>
</entry>
</feed>