<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[观夏Note]]></title> 
<link>//gm.angeldm.com/index.php</link> 
<description><![CDATA[新技术番]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[观夏Note]]></copyright>
<item>
<link>//gm.angeldm.com/post/226/</link>
<title><![CDATA[apache mod_jk.c missing uri map错误解决方法]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sat, 12 Oct 2013 04:16:18 +0000</pubDate> 
<guid>//gm.angeldm.com/post/226/</guid> 
<description>
<![CDATA[ 
	apache 和 tomcat 配置了很多次，每次都会遇到不同的问题，几乎没有一次是顺利。 自从使用了 ubuntu 的 apt-get 工具自动配置之后，才知道各个配置文件怎么写。 令人意外的是，上面的方法在 ubuntu 8.04 上面通过了，在 ubuntu 8.10 上面死活不行，不能解析 jsp 文件。比较了两台机器上面的所有相关的配置文件，一模一样，还是通不过。 mod_jk.log 文件也能生成，说明 apache 已经加载了 jk 的插件，问题出在哪里呢？<br/><br/>查看了各项日志也是正常，看不到异常信息。 实在没有办法了，更改了 mod_jk.conf 中的 JkLogLevel 为 trace 级别，打印的信息更多一些。 发现了浏览 jsp 文件的时候，提示 missing uri map for www.xxx.nl:/jsp ，即不能找到相应的 uri。<br/><br/>到网上搜索了一下，终于找到这个信息：<br/><br/>当遇到mod_jk.c (3033): missing uri map 错误时，通常是在httpd.conf中配置了虚拟主机，那么应该在每一个 VirtualHost 部分加入<br/><br/><div class="code">JkMountCopy On</div><br/><br/>如果拥有很多虚拟主机配置段，可以使用在全部配置中写入<br/><br/><div class="code">JkMountCopy All</div><br/><br/>这种写法，在 8.04 中不用，在 8.10 中要用。 发现，在 8.04 中 jk 是 1.2.25, 在 8.10 中 jk 是 1.2.26 可能只是这两个版本产生了区别 
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/181/</link>
<title><![CDATA[org.ua域名改DNS]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Mon, 02 Aug 2010 09:39:05 +0000</pubDate> 
<guid>//gm.angeldm.com/post/181/</guid> 
<description>
<![CDATA[ 
	更改域名的DNS，也是发邮件到 hostmaster@org.ua<br/>-------------------------------------------------<br/>Subject: MODIFY XXX.org.ua<br/><br/>domain: XXX.org.ua<br/>descr:<br/>admin-c: AAA-UANIC<br/>tech-c:&nbsp;&nbsp;BBB-UANIC<br/>tech-c: CCC-UANIC<br/>nserver: one.server.ns<br/>nserver: another.server<br/>changed: AAA-UANIC 20060120 日期<br/>source: UANIC
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/180/</link>
<title><![CDATA[ORG.UA域名免费renew续期的办法]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Mon, 02 Aug 2010 09:37:15 +0000</pubDate> 
<guid>//gm.angeldm.com/post/180/</guid> 
<description>
<![CDATA[ 
	原来一直传着ORG.UA的域名可以免费10年，其实这在前几年就不行了，08年初注册的域名还能用2年，到后期注册的域名就只能用1年了。前几天ORG.UA的域名管理员发来通知要续期renew一下，打开网页都是俄文，乱的很，幸好找到了续期的办法，续期免费用1年，以后每年都要重复操作。具体办法在此做个留存：<br/><br/>1、收到官方通知后，发送邮件到hostmaster@org.ua ，<br/><br/>主题：RENEW XXX.ORG.UA<br/><br/>邮件内容：domain: XXX.ORG.UA<br/><br/>2.等待官方回复，注意这份主题邮件：RENEW 你的org.ua域名 processing approval request&nbsp;&nbsp;，打开后复制带有如下字眼的一长串网址：https://hostmaster.net.ua/confirm.php?code=3511C4CA9BA9AAD2A3E3F728640CB8BD<br/><br/>3、打开以上网址后，用你“XXX-UANIC”的账号密码登陆 ，选择第一个选项后提交即可<br/><br/>4、收到2封以下主题邮件就说明续期成功了，第一份：CONFIRMED: RENEW XXX.ORG.UA ,第二封：STATUS CHANGED:xxx.org.ua (Domain Record #36104855) 
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/163/</link>
<title><![CDATA[PHP CLASS用法]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sun, 06 Dec 2009 05:14:36 +0000</pubDate> 
<guid>//gm.angeldm.com/post/163/</guid> 
<description>
<![CDATA[ 
	刚在大略浏览了一下首页更新的那篇有关Class的文章（指PHPE的那篇 http://www.phpe.net/articles/389.shtml ），很不错，建议看看。<br/>对类的摸索～～俺用了半年时间才大概理解类的作用和实现。主要是没有一篇能让我理解的文章（之前没接触过任何OO的东西）。<br/>以我的观点来说说PHP中的Class，用于表达的语言都是非正式的语言，也不能确定是否正确。<br/><br/>建立一个类很简单。<br/><br/><div class="code"><br/>&lt;?php<br/>class my_class &#123;&#125;<br/>?&gt;<br/></div><br/><br/>类到底干什么呢？很多人都是什么黑匣子，我在这里称它为一个独立的整体。我们只知道类名，而不知道里面有什么东西。那么，该如何使用这个类呢？<br/>首先：要知道它里面是否定义了公共的变量－－专业术语上称它为“属性”。<br/>其次：要知道它里面定义了什么函数－－专业术语中称它为“方法”。<br/>我都被这些专业术语搞糊涂了，所以干脆不理它了。<br/><br/>类中的如何定义公共变量，它有什么作用呢？<br/><br/>很简单，我们来扩充 my_class 类<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username;<br/> &#125;<br/>?&gt;<br/></div><br/>看上面很简单，我们定义了一个公共的变量，只是用 var+空格+普通变量名构成。它有什么用呢？考虑一下函数中，如果我们要访问函数外的变量，是不是要先 global 一下呢？这个想实现的效果也是如此，它是想让这个类中的所有函数都能访问它，而它区别于函数的一个地方，是类的外部也可以访问这个变量，我随后再讲外部如何访问它。还有一个区别，不能用复杂的语句给这个变量赋值（具体的等理解了类以后自己去看规则）。给它一个默认值<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username = &quot;深空&quot;;<br/>&#125;<br/>?&gt;<br/></div><br/>OK，定义了一个公共的变量了，接下来定义一个函数（也就是所谓的“方法”）。<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/> var $username = &quot;深空&quot;;<br/><br/>function show_username()<br/>&#123;<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>这个定义函数跟普通的定义函数形式上没什么区别了。简单就好，定义一个打印 $username 的函数：<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username = &quot;深空&quot;;<br/><br/>function show_username($username)<br/>&#123;<br/>echo $username;<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>到这里可能某些人开始迷糊了，呵呵，最关键的就是这里了，看清楚了。现在有三个 $username 了。到底哪个是哪个啊～～<br/>函数所带的行参，不用解释了吧？这个函数功能就是打印行参所接收的值，也就是如果：<br/><div class="code"><br/>&lt;?php<br/>show_username(&quot;猪头深空&quot;);<br/>?&gt;<br/></div><br/>那么它将打印 “猪头深空” ，就这么简单。<br/>怎么样访问这个函数？肯定不是我上面说的那样直接 show_username(”猪头深空”); 了，别急，类有类的一套。如下：<br/><div class="code"><br/>&lt;?php<br/>$Name = new my_class();<br/>?&gt;<br/></div><br/>这样就初始化上面的那个 my_class 的类了，并把这个对象赋给变量 $Name ，你可以这样理解，这个变量就代表整个类了，呵呵。<br/>使用类中的函数：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;show_username(&quot;猪头深空&quot;);<br/>?&gt;<br/></div><br/>晕了，为什么这么复杂？还要箭头？其实很形象的。本来已经把类给了变量 $Name 了是吧？也就是 $Name 代表了这个类，然后用一个箭头指向类中的 show_username 这个函数。就是这么简单，也就是说，这个函数是这个类中的，而不是其他的函数－－你就理解为表示一个区别吧，呵呵。<br/><br/>试试看哦，打印出 “猪头深空” 这四个字了。你说为什么要这么复杂？用函数不是也能实现么？我说，这么简单的你当然看不出好处了，我们继续扩充。<br/>还有一个疑问：刚才说的“公共的变量”怎么一点用处都没有呢？为什么这个函数不会自动接收这个公共变量 var $username 中的默认值？也就是如果我使用：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;show_username($username);<br/>?&gt;<br/></div><br/>会有什么结果呢?答案是没有任何输出。因为你没有给形参 $username 一个值。<br/>那么该怎么使用这个公共的变量？我们来修改一下这个类:<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username = &quot;深空&quot;;<br/><br/>function show_username()<br/>&#123;<br/>echo $this-&gt;username;<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>哇靠，不是吧，这回脸形参都没有了？还多了一个$this->，晕了不是，呵呵。其实这也是类的一个最大的方便之处。<br/>$this 的作用：访问一个公共的变量，或者类里面的函数。<br/>访问？这么专业？其实就是用 $this->username 来代替 var $username 而已拉，$this 用来说明它是公共的。可以访问的，函数外部的东西。<br/>试试看：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;show_username();<br/>?&gt;<br/></div><br/>看到了吧，终于打印 “深空” 这两个字了，娃哈哈。<br/>我不打印“深空”这两个字，我要打印“猪头深空”，怎么办？很简单，我们给这个公共变量重新赋值拉。服了你了。<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;username = &quot;猪头深空&quot;;<br/>?&gt;<br/></div><br/>这个能明白意思么？$Name->username 表示的是类里面的这个公共变量。等号赋值不用我解释了。<br/><br/>我们再来打印看看<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;show_username();<br/>?&gt;<br/></div><br/>哈哈，终于打印“猪头深空”了。不错吧，很方便吧，不用形参也能任意修改打印值哦～～。<br/><br/>不过单单打印一个名称也太没意思了，我们说点欢迎的话吧，来扩充一下这个类，创建一个名叫 Welcome 的函数：<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username = &quot;深空&quot;;<br/><br/>function show_username()<br/>&#123;<br/>echo $this-&gt;username;<br/>&#125;<br/><br/>function Welcome()<br/>&#123;<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>恩，实现什么功能好呢？简单点吧，就实现在名字前面有 “欢迎” 两个字好了<br/><div class="code"><br/>&lt;?php<br/>class my_class<br/>&#123;<br/>var $username = &quot;深空&quot;;<br/><br/>function show_username()<br/>&#123;<br/>echo $this-&gt;username;<br/>&#125;<br/><br/>function Welcome()<br/>&#123;<br/>echo &quot;欢迎&quot;;<br/>$this-&gt;show_username();<br/>&#125;<br/>&#125;<br/>?&gt;<br/></div><br/>第二次看到 $this 了吧？$this->show_username(); 干什么用呢？其实它就是调用 show_username 这个函数，用 $this 来表示这个函数在类中并且和 Welcome 函数平行，而不是在其他地方（比如Welcome函数中）。<br/><br/>Welcome 函数实现的功能很简单，首先打印两个字”欢迎”，然后接下去执行 show_username 函数，打印名字。<br/><br/>来试试这个函数吧：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;Welcome();<br/>?&gt;<br/></div><br/>看到了吧，打印出“欢迎深空”这四个字了。<br/><br/>可是我要打印“欢迎猪头深空”，怎么办？我服了你了，我们给公共变量 var $username 一个值吧：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;username = &quot;猪头深空&quot;;<br/>?&gt;<br/></div><br/>接下去打印欢迎语：<br/><div class="code"><br/>&lt;?php<br/>$Name-&gt;Welcome();<br/>?&gt;<br/></div><br/>嘿嘿，终于打印“欢迎猪头深空”了。<br/><br/>怎么样？明白了类的用法了么？好处在于能够调用类中的任意函数，只要用 $this 指出来，可以改变一个公共变量的值，可以在类中的函数中使用这个公共变量。………多了去了，它的应用等待你去发现了。
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/162/</link>
<title><![CDATA[初探AJAX PHP无刷新form表单提交]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sun, 15 Nov 2009 06:23:31 +0000</pubDate> 
<guid>//gm.angeldm.com/post/162/</guid> 
<description>
<![CDATA[ 
	初探AJAX PHP无刷新form表单提交<br/><div class="code"><br/>ajax.php:<br/><br/>&lt;head&gt;<br/>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;<br/>&lt;title&gt;Untitled Document&lt;/title&gt;<br/>&lt;/head&gt;<br/><br/><br/>&lt;script language=&quot;javascript&quot;&gt;<br/>function saveUserInfo()<br/>&#123;<br/>//获取接受返回信息层<br/>var msg = document.getElementById(&quot;msg&quot;);<br/><br/>//获取表单对象和用户信息值<br/>var f = document.user_info;<br/>var userName = f.user_name.value;<br/>var userAge = f.user_age.value;<br/>var userSex = f.user_sex.value;<br/><br/>//接收表单的URL地址<br/>var url = &quot;./ajax_output.php&quot;;<br/><br/>//需要POST的值，把每个变量都通过&amp;来联接<br/>var postStr&nbsp;&nbsp;&nbsp;&nbsp;= &quot;user_name=&quot;+ userName +&quot;&amp;user_age=&quot;+ userAge +&quot;&amp;user_sex=&quot;+ userSex;<br/><br/>//实例化Ajax<br/>//var ajax = InitAjax();<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ajax = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开始初始化XMLHttpRequest对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(window.XMLHttpRequest) &#123; //Mozilla 浏览器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajax = new XMLHttpRequest();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (ajax.overrideMimeType) &#123;//设置MiME类别<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajax.overrideMimeType(&quot;text/xml&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (window.ActiveXObject) &#123; // IE浏览器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajax = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajax = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!ajax) &#123; // 异常，创建对象实例失败<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.alert(&quot;不能创建XMLHttpRequest对象实例.&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>//通过Post方式打开连接<br/>ajax.open(&quot;POST&quot;, url, true);<br/><br/>//定义传输的文件HTTP头信息<br/>ajax.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);<br/><br/>//发送POST数据<br/>ajax.send(postStr);<br/><br/>//获取执行状态<br/>ajax.onreadystatechange = function() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//如果执行状态成功，那么就把返回信息写到指定的层里<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (ajax.readyState == 4 &amp;&amp; ajax.status == 200) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; msg.innerHTML = ajax.responseText;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>alert (userName);<br/>&#125;<br/>&lt;/script&gt;<br/>&lt;body &gt;<br/>&lt;div id=&quot;msg&quot;&gt;&lt;/div&gt;<br/>&lt;form name=&quot;user_info&quot; method=&quot;post&quot; action=&quot;&quot;&gt;<br/>姓名：&lt;input type=&quot;text&quot; id=&quot;user_name&quot;name=&quot;user_name&quot; /&gt;&lt;br /&gt;<br/>年龄：&lt;input type=&quot;text&quot; name=&quot;user_age&quot; /&gt;&lt;br /&gt;<br/>性别：&lt;input type=&quot;text&quot; name=&quot;user_sex&quot; /&gt;&lt;br /&gt;<br/><br/>&lt;input type=&quot;button&quot; value=&quot;提交表单&quot; onClick=&quot;saveUserInfo()&quot;&gt;<br/>&lt;/form&gt;<br/><br/>&lt;/body&gt;<br/><br/>ajax_output.php:<br/><br/>&lt;?php<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$username = $_POST&#91;&#039;user_name&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$userage = $_POST&#91;&#039;user_age&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$usersex = $_POST&#91;&#039;user_sex&#039;&#93;;<br/>&nbsp;&nbsp; echo &quot;$username &lt;br&gt;&quot;;<br/>&nbsp;&nbsp; echo &quot;$userage &lt;br&gt;&quot;;<br/>&nbsp;&nbsp; echo &quot;$usersex &lt;br&gt;&quot;;<br/><br/>&nbsp;&nbsp; $db = new mysqli(&#039;localhost&#039;,&#039;root&#039;,&#039;123456&#039;,&#039;test&#039;);<br/>&nbsp;&nbsp; if(!$db)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;连接失败！&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $db-&gt;query(&quot;set names utf8&quot;);<br/>&nbsp;&nbsp; $query = &quot;insert into userinfo(uname,uage,usex) values (&#039;&quot;.$username.&quot;&#039;,&#039;&quot;.$userage.&quot;&#039;,&#039;&quot;.$usersex.&quot;&#039;)&quot;;<br/>&nbsp;&nbsp; $result = $db-&gt;query($query);<br/>&nbsp;&nbsp; if ($result)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;上传成功！&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;失败！&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $db-&gt;close();<br/><br/>?&gt;<br/></div>
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/161/</link>
<title><![CDATA[Ajax的post方法的使用]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sun, 15 Nov 2009 06:22:41 +0000</pubDate> 
<guid>//gm.angeldm.com/post/161/</guid> 
<description>
<![CDATA[ 
	　　一些简单的基础知识，一些小小的细节，也许就决定了一个功能甚至一个软件的成败。<br/><br/> 前几天做一个小功能，用户注册时使用Ajax检验用户名是否已被注册。因为在这个小项目中，只在这里使用了Ajax，所以就不打算用以前常用的Prototype。开始时是使用get方法提交数据的，后来想想，还是换成post吧，没别的原因，因为Prototype默认是使用post方法的，所以就觉得post看上去顺眼一点。写好的Javascript代码如下：<br/><div class="code">Javascript<br/>　　var Ajax=function(option)&#123;<br/>　　　　　　var request;<br/>　　　　　　var CreateRquest=function()&#123;<br/>　　　　　　　　var httpRequest;<br/>　　　　　　　　try&#123;<br/>　　　　　　　　　　httpRequest=new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);<br/>　　　　　　　　&#125;catch(e)&#123;<br/>　　　　　　　　　　try&#123;<br/>　　　　　　　　　　　　httpRequest=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br/>　　　　　　　　　　&#125;catch(e1)&#123;<br/>　　　　　　　　　　　　httpRequest=new XMLHttpRequest();<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　&#125;<br/>　　　　　　　　return httpRequest;<br/>　　　　　　&#125;<br/>　　　　　　var SendRequest=function()&#123;<br/>　　　　　　　　request=CreateRquest();<br/>　　　　　　　　request.open(&quot;post&quot;,option.Url,true);<br/>　　　　　　　　<br/>　　　　　　　　request.onreadystatechange=ResponseRequest;<br/>　　　　　　　　request.send(option.Param);<br/>　　　　　　&#125;<br/>　　　　　　var ResponseRequest=function()&#123;<br/>　　　　　　　　if(request.readystate==4)&#123;<br/>　　　　　　　　　　if(request.status==200)&#123;<br/>　　　　　　　　　　　　option.Success(request);<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　　　else&#123;<br/>　　　　　　　　　　　　option.Failure(request);<br/>　　　　　　　　　　&#125;<br/>　　　　　　　　&#125;<br/>　　　　　　&#125;<br/>　　　　　　SendRequest();<br/>　　　　&#125;<br/>　　　　var OnBlur=function(el)<br/>　　　　&#123;<br/>　　　　　　var option=&#123;<br/>　　　　　　　　Url:&quot;Handler.ashx&quot;,<br/>　　　　　　　　Param:&quot;text=abv&quot;,<br/>　　　　　　　　Success:function(request)&#123;<br/>　　　　　　　　　　alert(request.responseText);<br/>　　　　　　　　&#125;,<br/>　　　　　　　　Failure:function(request)&#123;<br/>　　　　　　　　　　alert(false);<br/>　　　　　　　　&#125;<br/>　　　　　　&#125;;<br/>　　　　　　new Ajax(option);<br/>　　　　&#125;</div><br/>后台代码如下：<br/><div class="code">Handler<br/>　　Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest<br/>　　　　context.Response.ContentType = &quot;text/plain&quot;<br/>　　　　context.Response.Write(context.Request.QueryString.Count)<br/>　　　　Dim text As String = context.Request.Form(&quot;text&quot;)<br/>　　　　context.Response.Write(text)<br/>　　End Sub</div><br/><br/>　　测试的时候发现，后台怎么也获取不到前台传来的数据，真是百思不得其解。翻了一下书，都是只说get不说post方法的，然后在百度上狂找资料，真是功夫不负有心人啊，终于找到了，原来要在open方法的后面加上一句话：<br/><div class="code"><br/>　　　　　　var SendRequest=function()&#123;<br/>　　　　　　　　request=CreateRquest();<br/>　　　　　　　　request.open(&quot;post&quot;,option.Url,true);<br/>　　　　　　　　<br/>　　　　　　　　request.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);<br/>　　　　　　　　<br/>　　　　　　　　request.onreadystatechange=ResponseRequest;<br/>　　　　　　　　request.send(option.Param);<br/>　　　　　　&#125;<br/></div><br/>　　OK，事情就这么简单的搞定了，真是踏破铁鞋无觅处，得来全不废功夫啊。<br/><br/>　　本人具体也没研究过为什么要加上这句话：<br/><div class="code"><br/>　　　　　　　　request.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);<br/></div>
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/142/</link>
<title><![CDATA[如果服务器端不支持 PEAR::Spreadsheet_Excel_Writer]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sat, 13 Sep 2008 02:27:07 +0000</pubDate> 
<guid>//gm.angeldm.com/post/142/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;* 1.在根目录下建立文件夹,名为”PEAR”(或什么的都可以);<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 2.在 http://pear.php.net/package/PEAR/download 下载 PEAR-1.4.9.tgz(或者最新版本);<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 3.把 PEAR-1.4.9.tgz 解压后的 pear.php 复制到 “PEAR” 路径下;<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 4.在 http://pear.php.net/package/Spreadsheet_Excel_Writer/download 下载Spreadsheet_Excel_Writer-0.9.0.tgz;<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 5.在 http://pear.php.net/package/OLE/download 下载 OLE-0.5.tgz;<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 6.把 Spreadsheet_Excel_Writer-0.9.0.tgz 中的 “Writer.php” 和 “Writer” 文件夹解压到 “PEAR/Spreadsheet/Excel/” 路径下;<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 7.把 OLE-0.5.tgz 中的 “OLE.php” 和 “PPS.php” 和 “PPS” 文件夹解压到 “PEAR/OLE” 路径下;<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 8.在根目录下建立 “global.php”:<br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. &lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. $path = $_SERVER&#91;‘DOCUMENT_ROOT‘&#93;.‘/PEAR‘; // 你自定义的 PEAR 路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. set_include_path($path . PATH_SEPARATOR . get_include_path() ); // 设置 PHP 环境变量路径为除 php.ini 默认的以外, 再加上你自定义的 PEAR 路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. ?&gt;<br/><br/></div><br/>在使用的文件中包含global.php和Spreadsheet_Excel_Writer就ok了。
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/140/</link>
<title><![CDATA[php使用 PEAR Spreadsheet Excel Writer 创建Excel文档]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Tue, 09 Sep 2008 14:58:04 +0000</pubDate> 
<guid>//gm.angeldm.com/post/140/</guid> 
<description>
<![CDATA[ 
	使用PEAR Spreadsheet_Excel_Writer创建Excel，MS EXCEL不是必需的， OpenOffice Calc也是一个不错的选择。<br/><br/>安装pear:<br/>双击php目录中的go-pear.bat，一路回车安装完毕。<br/>双击PEAR_ENV.reg写入注册表信息。<br/><br/>在命令窗口输入如下命令安装OLE及Spreadsheet_Excel_Writer<br/><br/>$ pear install http://download.pear.php.net/package/OLE-0.5.tgz<br/>$ pear install http://download.pear.php.net/package/Spreadsheet_Excel_Writer-0.9.1.tgz<br/><br/>生成一个简单的电子表格，代码如下：（test.php）<br/><br/><?php<br/>// Include PEAR::Spreadsheet_Excel_Writer<br/>require_once "Spreadsheet/Excel/Writer.php";<br/> <br/>// Create an instance<br/>$xls =& new Spreadsheet_Excel_Writer();<br/> <br/>// Send HTTP headers to tell the browser what's coming<br/>$xls->send("test.xls");<br/> <br/>// Add a worksheet to the file, returning an object to add data to<br/>$sheet =& $xls->addWorksheet('Binary Count');<br/> <br/>// Write some numbers<br/>for ( $i=0;$i<11;$i++ ) &#123;<br/> // Use PHP's decbin() function to convert integer to binary<br/> $sheet->write($i,0,decbin($i));<br/>&#125;<br/> <br/>// Finish the spreadsheet, dumping it to the browser<br/>$xls->close();<br/> <br/>?><br/><br/>在浏览器中输入上面test.php文件所在的地址，就可以用excel或者OpenOffice打开一个电子表格。<br/><br/>将生成的excel文档保存到文件系统。代码如下：<br/><br/><?php<br/> <br/>// 如果文件不存在<br/>if ( !file_exists('sheets/binary.xls') ) &#123;<br/> <br/>// Include PEAR::Spreadsheet_Excel_Writer<br/>require_once "Spreadsheet/Excel/Writer.php";<br/> <br/>// Create an instance, passing the filename to create<br/>$xls =& new Spreadsheet_Excel_Writer('sheets/binary.xls');<br/> <br/>// Add a worksheet to the file, returning an object to add data to<br/>$sheet =& $xls->addWorksheet('Binary Count');<br/> <br/>// Write some numbers<br/> for ( $i=0;$i<11;$i++ ) &#123;<br/>&nbsp;&nbsp; // Use PHP's decbin() function to convert integer to binary<br/>&nbsp;&nbsp; $sheet->write($i,0,decbin($i));<br/> &#125;<br/> <br/>// Finish the spreadsheet, dumping it to the browser<br/>$xls->close();<br/>&#125;<br/> <br/>?><br/><br/>注意，在linux或Unix下，文件所在目录必须可读。<br/>
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/139/</link>
<title><![CDATA[PHP读取Excel中关于编码转换的问题]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Tue, 02 Sep 2008 21:37:23 +0000</pubDate> 
<guid>//gm.angeldm.com/post/139/</guid> 
<description>
<![CDATA[ 
	编码是个很基础的问题，也是大家很容易忽略的问题，写代码之前多多考虑，以后会少很多麻烦。<br/><br/>PHP发展了不少，现在pear用起来很方便，其中就有相关的class来读取Excel文件里面的内容，如果不想使用pear的话，可以考虑使用excel_class.php，google一下，可以找到这个class的source code下载，也能找到基本的example code，用起来很方便。<br/><br/>需要注意的是，从Excel里面读取出来的属于UTF-16LE编码，如果在移动应用中使用excel_class，则需要注意，因为通常手机都是支持UTF-8编码，其中就涉及到编码的转换。<br/><br/>例如我使用<br/>echo $return[Sheet2][0][0];<br/>来显示第1行第1列里面的内容，原本内容是“开始”，使用PHP在web上显示的时候也确实是“开始”，但是查看网页的源代码是<br/>&#24320&#22987<br/>其中&#是为了在网页上显示，24320和22987的十六进制表示则是“开始”的UTF-16LE编码。<br/><br/>那么我们需要做的就是将这个UTF-16LE编码转换为UTF-8编码。<br/>首先打开excel_class.php，找到函数uc2html， 将函数中的代码注释掉，直接将参数返回， 即改函数不做任何操作。<br/>function uc2html($str) &#123;<br/>&nbsp;&nbsp;return $str;<br/>&#125;<br/><br/>接下来使用PHP中提供的函数mb_convert_encoding来将UTF-16LE转换成UTF-8。<br/><br/>echo mb_convert_encoding($return[Sheet2][0][0], 'UTF-8', 'UTF-16LE');<br/><br/>到此，即完成了UTF-16LE到UTF-8的转换。
]]>
</description>
</item><item>
<link>//gm.angeldm.com/post/138/</link>
<title><![CDATA[常用正则表达式大全]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[网页相关]]></category>
<pubDate>Sat, 23 Aug 2008 05:31:01 +0000</pubDate> 
<guid>//gm.angeldm.com/post/138/</guid> 
<description>
<![CDATA[ 
	常用正则表达式大全<br/><div class="code"><br/>&quot;^&#92;d+$&quot;　　//非负整数（正整数 + 0）<br/>&quot;^&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*$&quot;　　//正整数<br/>&quot;^((-&#92;d+)&#124;(0+))$&quot;　　//非正整数（负整数 + 0）<br/>&quot;^-&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*$&quot;　　//负整数<br/>&quot;^-?&#92;d+$&quot;　　　　//整数<br/>&quot;^&#92;d+(&#92;.&#92;d+)?$&quot;　　//非负浮点数（正浮点数 + 0）<br/>&quot;^((&#91;0-9&#93;+&#92;.&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*)&#124;(&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*&#92;.&#91;0-9&#93;+)&#124;(&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*))$&quot;　　//正浮点数<br/>&quot;^((-&#92;d+(&#92;.&#92;d+)?)&#124;(0+(&#92;.0+)?))$&quot;　　//非正浮点数（负浮点数 + 0）<br/>&quot;^(-((&#91;0-9&#93;+&#92;.&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*)&#124;(&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*&#92;.&#91;0-9&#93;+)&#124;(&#91;0-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*)))$&quot;　　//负浮点数<br/>&quot;^(-?&#92;d+)(&#92;.&#92;d+)?$&quot;　　//浮点数<br/>&quot;^&#91;A-Za-z&#93;+$&quot;　　//由26个英文字母组成的字符串<br/>&quot;^&#91;A-Z&#93;+$&quot;　　//由26个英文字母的大写组成的字符串<br/>&quot;^&#91;a-z&#93;+$&quot;　　//由26个英文字母的小写组成的字符串<br/>&quot;^&#91;A-Za-z0-9&#93;+$&quot;　　//由数字和26个英文字母组成的字符串<br/>&quot;^&#92;w+$&quot;　　//由数字、26个英文字母或者下划线组成的字符串<br/>&quot;^&#91;&#92;w-&#93;+(&#92;.&#91;&#92;w-&#93;+)*@&#91;&#92;w-&#93;+(&#92;.&#91;&#92;w-&#93;+)+$&quot;　　　　//email地址<br/>&quot;^&#91;a-zA-z&#93;+://(&#92;w+(-&#92;w+)*)(&#92;.(&#92;w+(-&#92;w+)*))*(&#92;?&#92;S*)?$&quot;　　//url<br/>/^(d&#123;2&#125;&#124;d&#123;4&#125;)-((0(&#91;1-9&#93;&#123;1&#125;))&#124;(1&#91;1&#124;2&#93;))-((&#91;0-2&#93;(&#91;1-9&#93;&#123;1&#125;))&#124;(3&#91;0&#124;1&#93;))$/&nbsp;&nbsp; //&nbsp;&nbsp;年-月-日<br/>/^((0(&#91;1-9&#93;&#123;1&#125;))&#124;(1&#91;1&#124;2&#93;))/((&#91;0-2&#93;(&#91;1-9&#93;&#123;1&#125;))&#124;(3&#91;0&#124;1&#93;))/(d&#123;2&#125;&#124;d&#123;4&#125;)$/&nbsp;&nbsp; // 月/日/年<br/>&quot;^(&#91;w-.&#93;+)@((&#91;&#91;0-9&#93;&#123;1,3&#125;.&#91;0-9&#93;&#123;1,3&#125;.&#91;0-9&#93;&#123;1,3&#125;.)&#124;((&#91;w-&#93;+.)+))(&#91;a-zA-Z&#93;&#123;2,4&#125;&#124;&#91;0-9&#93;&#123;1,3&#125;)(&#93;?)$&quot;&nbsp;&nbsp; //Emil<br/>&quot;(d+-)?(d&#123;4&#125;-?d&#123;7&#125;&#124;d&#123;3&#125;-?d&#123;8&#125;&#124;^d&#123;7,8&#125;)(-d+)?&quot;&nbsp;&nbsp;&nbsp;&nbsp; //电话号码<br/>&quot;^(d&#123;1,2&#125;&#124;1dd&#124;2&#91;0-4&#93;d&#124;25&#91;0-5&#93;).(d&#123;1,2&#125;&#124;1dd&#124;2&#91;0-4&#93;d&#124;25&#91;0-5&#93;).(d&#123;1,2&#125;&#124;1dd&#124;2&#91;0-4&#93;d&#124;25&#91;0-5&#93;).(d&#123;1,2&#125;&#124;1dd&#124;2&#91;0-4&#93;d&#124;25&#91;0-5&#93;)$&quot;&nbsp;&nbsp; //IP地址<br/><br/>匹配中文字符的正则表达式： &#91;&#92;u4e00-&#92;u9fa5&#93;<br/>匹配双字节字符(包括汉字在内)：&#91;^&#92;x00-&#92;xff&#93;<br/>匹配空行的正则表达式：&#92;n&#91;&#92;s&#124; &#93;*&#92;r<br/>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;&#92;/&#92;1&gt;&#124;&lt;(.*) &#92;/&gt;/<br/>匹配首尾空格的正则表达式：(^&#92;s*)&#124;(&#92;s*$)<br/>匹配Email地址的正则表达式：&#92;w+(&#91;-+.&#93;&#92;w+)*@&#92;w+(&#91;-.&#93;&#92;w+)*&#92;.&#92;w+(&#91;-.&#93;&#92;w+)*<br/>匹配网址URL的正则表达式：^&#91;a-zA-z&#93;+://(&#92;&#92;w+(-&#92;&#92;w+)*)(&#92;&#92;.(&#92;&#92;w+(-&#92;&#92;w+)*))*(&#92;&#92;?&#92;&#92;S*)?$<br/>匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^&#91;a-zA-Z&#93;&#91;a-zA-Z0-9_&#93;&#123;4,15&#125;$<br/>匹配国内电话号码：(&#92;d&#123;3&#125;-&#124;&#92;d&#123;4&#125;-)?(&#92;d&#123;8&#125;&#124;&#92;d&#123;7&#125;)?<br/>匹配腾讯QQ号：^&#91;1-9&#93;*&#91;1-9&#93;&#91;0-9&#93;*$<br/><br/><br/>元字符及其在正则表达式上下文中的行为：<br/><br/>&#92; 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。<br/><br/>^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 ’&#92;n’ 或 ’&#92;r’ 之后的位置。<br/><br/>$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 ’&#92;n’ 或 ’&#92;r’ 之前的位置。<br/><br/>* 匹配前面的子表达式零次或多次。<br/><br/>+ 匹配前面的子表达式一次或多次。+ 等价于 &#123;1,&#125;。<br/><br/>? 匹配前面的子表达式零次或一次。? 等价于 &#123;0,1&#125;。<br/><br/>&#123;n&#125; n 是一个非负整数，匹配确定的n 次。<br/><br/>&#123;n,&#125; n 是一个非负整数，至少匹配n 次。<br/><br/>&#123;n,m&#125; m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。<br/><br/>? 当该字符紧跟在任何一个其他限制符 (*, +, ?, &#123;n&#125;, &#123;n,&#125;, &#123;n,m&#125;) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。<br/><br/>. 匹配除 &quot;&#92;n&quot; 之外的任何单个字符。要匹配包括 ’&#92;n’ 在内的任何字符，请使用象 ’&#91;.&#92;n&#93;’ 的模式。<br/>(pattern) 匹配pattern 并获取这一匹配。<br/><br/>(?:pattern) 匹配pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。<br/><br/>(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。<br/><br/>(?!pattern) 负向预查，与(?=pattern)作用相反<br/><br/>x&#124;y 匹配 x 或 y。<br/><br/>&#91;xyz&#93; 字符集合。<br/><br/>&#91;^xyz&#93; 负值字符集合。<br/><br/>&#91;a-z&#93; 字符范围，匹配指定范围内的任意字符。<br/><br/>&#91;^a-z&#93; 负值字符范围，匹配任何不在指定范围内的任意字符。<br/><br/>&#92;b 匹配一个单词边界，也就是指单词和空格间的位置。<br/><br/>&#92;B 匹配非单词边界。<br/><br/>&#92;cx 匹配由x指明的控制字符。<br/><br/>&#92;d 匹配一个数字字符。等价于 &#91;0-9&#93;。<br/><br/>&#92;D 匹配一个非数字字符。等价于 &#91;^0-9&#93;。<br/><br/>&#92;f 匹配一个换页符。等价于 &#92;x0c 和 &#92;cL。<br/><br/>&#92;n 匹配一个换行符。等价于 &#92;x0a 和 &#92;cJ。<br/><br/>&#92;r 匹配一个回车符。等价于 &#92;x0d 和 &#92;cM。<br/><br/>&#92;s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于&#91; &#92;f&#92;n&#92;r&#92;t&#92;v&#93;。<br/><br/>&#92;S 匹配任何非空白字符。等价于 &#91;^ &#92;f&#92;n&#92;r&#92;t&#92;v&#93;。<br/><br/>&#92;t 匹配一个制表符。等价于 &#92;x09 和 &#92;cI。<br/><br/>&#92;v 匹配一个垂直制表符。等价于 &#92;x0b 和 &#92;cK。<br/><br/>&#92;w 匹配包括下划线的任何单词字符。等价于’&#91;A-Za-z0-9_&#93;’。<br/><br/>&#92;W 匹配任何非单词字符。等价于 ’&#91;^A-Za-z0-9_&#93;’。<br/><br/>&#92;xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。<br/><br/>&#92;num 匹配 num，其中num是一个正整数。对所获取的匹配的引用。<br/><br/>&#92;n 标识一个八进制转义值或一个后向引用。如果 &#92;n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。<br/><br/>&#92;nm 标识一个八进制转义值或一个后向引用。如果 &#92;nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 &#92;nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 &#92;nm 将匹配八进制转义值 nm。<br/><br/>&#92;nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。<br/><br/>&#92;un 匹配 n，其中 n 是一个用四个十六进制数字表示的Unicode字符。<br/><br/>匹配中文字符的正则表达式： &#91;u4e00-u9fa5&#93;<br/><br/>匹配双字节字符(包括汉字在内)：&#91;^x00-xff&#93;<br/><br/>匹配空行的正则表达式：n&#91;s&#124; &#93;*r<br/><br/>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;&#124;&lt;(.*) /&gt;/<br/><br/>匹配首尾空格的正则表达式：(^s*)&#124;(s*$)<br/><br/>匹配Email地址的正则表达式：w+(&#91;-+.&#93;w+)*@w+(&#91;-.&#93;w+)*.w+(&#91;-.&#93;w+)*<br/><br/>匹配网址URL的正则表达式：http://(&#91;w-&#93;+.)+&#91;w-&#93;+(/&#91;w- ./?%&amp;=&#93;*)?<br/><br/>利用正则表达式限制网页表单里的文本框输入内容：<br/><br/>用正则表达式限制只能输入中文：onkeyup=&quot;value=value.replace(/&#91;^u4E00-u9FA5&#93;/g,&#039;&#039;)&quot; ōnbeforepaste=&quot;clipboardData.setData(&#039;text&#039;,clipboardData.getData(&#039;text&#039;).replace(/&#91;^u4E00-u9FA5&#93;/g,&#039;&#039;))&quot;<br/><br/>用正则表达式限制只能输入全角字符： ōnkeyup=&quot;value=value.replace(/&#91;^uFF00-uFFFF&#93;/g,&#039;&#039;)&quot; ōnbeforepaste=&quot;clipboardData.setData(&#039;text&#039;,clipboardData.getData(&#039;text&#039;).replace(/&#91;^uFF00-uFFFF&#93;/g,&#039;&#039;))&quot;<br/><br/>用正则表达式限制只能输入数字：onkeyup=&quot;value=value.replace(/&#91;^d&#93;/g,&#039;&#039;) &quot;onbeforepaste=&quot;clipboardData.setData(&#039;text&#039;,clipboardData.getData(&#039;text&#039;).replace(/&#91;^d&#93;/g,&#039;&#039;))&quot;<br/><br/>用正则表达式限制只能输入数字和英文：onkeyup=&quot;value=value.replace(/&#91;W&#93;/g,&#039;&#039;) &quot;onbeforepaste=&quot;clipboardData.setData(&#039;text&#039;,clipboardData.getData(&#039;text&#039;).replace(/&#91;^d&#93;/g,&#039;&#039;))&quot; <br/></div>
]]>
</description>
</item>
</channel>
</rss>