<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Achely's Blog]]></title>
  <subtitle type="html"><![CDATA[水至清则无鱼,人至贱则无敌!]]></subtitle>
  <id>http://www.zhangyongjun.com/blog/</id> 
  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.zhangyongjun.com/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-08-10T19:16:38+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[搜索引擎robots文件基本语法介绍]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-08-10T19:16:38+08:00</updated>
	  <published>2008-08-10T19:16:38+08:00</published>
		  <summary type="html"><![CDATA[<P><FONT face=Verdana>1.禁止所有搜索引擎访问网站的任何部分的robots文件<BR>User-agent: *<BR>Disallow: /</FONT></P>
<P><FONT face=Verdana>2.允许所有的robot访问的文件<BR>User-agent: *<BR>Disallow:</FONT></P>
<P><FONT face=Verdana>3.禁止所有搜索引擎访问网站的几个部分的robots文件<BR>User-agent: *<BR>Disallow: /cgi-bin/<BR>Disallow: /tmp/<BR>Disallow: /private/</FONT></P>
<P><FONT face=Verdana>4.禁止某个搜索引擎的访问的robots文件<BR>User-agent: BadBot<BR>Disallow: /</FONT></P>
<P><FONT face=Verdana>5.只允许某个搜索引擎的访问的robots文件<BR>User-agent: WebCrawler<BR>Disallow:<BR>User-agent: *<BR>Disallow: /</FONT></P>
<P><FONT face=Verdana>6.禁止搜索引擎访问单个文件</FONT></P>
<P><FONT face=Verdana>Robots META标签则主要是针对一个个具体的页面。和其他的META标签（如使用的语言、页面的描述、关键词等）一样，Robots META标签也是放在页面的&lt;head&gt;&lt;/head&gt;中，专门用来告诉搜索引擎ROBOTS如何抓取该页的内容。</FONT></P>
<P><FONT face=Verdana>Robots META标签的写法：</FONT></P>
<P><FONT face=Verdana>Robots META标签中没有大小写之分，name=”Robots”表示所有的搜索引擎，可以针对某个具体搜索引擎写为name=”BaiduSpider”。 content部分有四个指令选项：index、noindex、follow、nofollow，指令间以“,”分隔。</FONT></P>
<P><FONT face=Verdana>INDEX 指令告诉搜索机器人抓取该页面；</FONT></P>
<P><FONT face=Verdana>FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去；</FONT></P>
<P><FONT face=Verdana>Robots Meta标签的缺省值是INDEX和FOLLOW，只有inktomi除外，对于它，缺省值是INDEX,NOFOLLOW。</FONT></P>
<P><FONT face=Verdana>这样，一共有四种组合：</FONT></P>
<P><FONT face=Verdana>&lt;META NAME="ROBOTS" CONTENT="INDEX,FOLLOW"&gt;<BR>&lt;META NAME="ROBOTS" CONTENT="NOINDEX,FOLLOW"&gt;<BR>&lt;META NAME="ROBOTS" CONTENT="INDEX,NOFOLLOW"&gt;<BR>&lt;META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW"&gt;</FONT></P>
<P><FONT face=Verdana>其中</FONT></P>
<P><FONT face=Verdana>&lt;META NAME="ROBOTS" CONTENT="INDEX,FOLLOW"&gt;可以写成&lt;META NAME="ROBOTS" CONTENT="ALL"&gt;；</FONT></P>
<P><FONT face=Verdana>&lt;META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW"&gt;可以写成&lt;META NAME="ROBOTS" CONTENT="NONE"&gt;</FONT></P>
<P><FONT face=Verdana>目前看来，绝大多数的搜索引擎机器人都遵守robots.txt的规则，而对于Robots META标签，目前支持的并不多，但是正在逐渐增加，如著名搜索引擎GOOGLE就完全支持，而且GOOGLE还增加了一个指令“archive”，可以限制GOOGLE是否保留网页快照。例如：</FONT></P>
<P><FONT face=Verdana>&lt;META NAME="googlebot" CONTENT="index,follow,noarchive"&gt;<BR></FONT></P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=218" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=218</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[设计友好URL的一般原则及规范]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-07-22T11:24:14+08:00</updated>
	  <published>2008-07-22T11:24:14+08:00</published>
		  <summary type="html"><![CDATA[<P style="MARGIN-TOP: 0.42cm" align=center><FONT face=SimSun><FONT size=5></FONT></FONT>&nbsp;</P>
<H1 class=cjk align=left>什么是<FONT face="Arial, sans-serif">URI(URL)</FONT></H1>
<H2 class=cjk>定义</H2>
<P style="MARGIN-BOTTOM: 0cm"><FONT face="Times New Roman, serif">URL: Uniform Resource Locators</FONT></P>
<P style="MARGIN-BOTTOM: 0cm" align=left><FONT face="Times New Roman, serif">URI:Uniform Resource Identicators</FONT></P>
<P style="MARGIN-BOTTOM: 0cm" align=left><FONT face="Times New Roman, serif">URI</FONT>分两部分，<FONT face="Times New Roman, serif">scheme, scheme-specific</FONT>，这两部分由冒号分割开。<FONT face="Times New Roman, serif">schema</FONT>包括<FONT face="Times New Roman, serif">HTTP,FTP,NEWS,GOPHER</FONT>等，详情参见<FONT face="Times New Roman, serif">RFC1738</FONT>（<FONT face="Times New Roman, serif"><A href="ftp://ds.internic.net/rfc/rfc1738.txt">ftp://ds.internic.net/rfc/rfc1738.txt</A></FONT>）</P>
<H2 class=cjk>语法</H2>
<P><FONT face="Times New Roman, serif">HTTP,FTP</FONT>的语法很相像，都是这样<FONT face="Times New Roman, serif">:</FONT></P>
<P><FONT face="Times New Roman, serif">schema://user:password@host:port/directory/file.extension</FONT></P>
<H2 class=cjk>编码</H2>
<P><FONT face="Times New Roman, serif">URI</FONT>中理论上只允许<FONT face="Times New Roman, serif">ASCII</FONT>字符。</P>
<P>部分特殊符号必须编码，不能直接出现在<FONT face="Times New Roman, serif">URI</FONT>中，如“<FONT face="Times New Roman, serif">~”</FONT></P>
<P style="MARGIN-BOTTOM: 0cm" align=left><BR></P>
<P style="MARGIN-BOTTOM: 0cm" align=left><FONT face="Times New Roman, serif">Web</FONT>项目中，这些都是<FONT face="Times New Roman, serif">URI</FONT>：</P>
<P style="MARGIN-BOTTOM: 0cm" align=left>链接地址（<FONT face="Times New Roman, serif">a</FONT>标签的<FONT face="Times New Roman, serif">href</FONT>属性）</P>
<P style="MARGIN-BOTTOM: 0cm" align=left>图片的源（<FONT face="Times New Roman, serif">img</FONT>标签的<FONT face="Times New Roman, serif">src</FONT>属性）</P>
<P style="MARGIN-BOTTOM: 0cm" align=left>多媒体文件的源（<FONT face="Times New Roman, serif">object</FONT>标签的<FONT face="Times New Roman, serif">src</FONT>属性）</P>
<P style="MARGIN-BOTTOM: 0cm" align=left><FONT face="Times New Roman, serif">CSS</FONT>，<FONT face="Times New Roman, serif">JavaScript</FONT>地址（<FONT face="Times New Roman, serif">link</FONT>标签的<FONT face="Times New Roman, serif">href </FONT>属性，<FONT face="Times New Roman, serif">script</FONT>标签的<FONT face="Times New Roman, serif">src</FONT>属性）</P>
<H1 class=cjk>为什么要设计好的<FONT face="Arial, sans-serif">URI</FONT></H1>
<P>重要的入口</P>
<P>便于传播</P>
<P>便于用户挖掘内容</P>
<H1 class=cjk align=left><FONT face="Arial, sans-serif">URI</FONT>的常见问题</H1>
<H2 class=cjk>难以输入</H2>
<H3 class=cjk><FONT face="Arial, sans-serif">URI</FONT>不必要的冗长</H3>
<P>比如：</P>
<P><FONT face="Times New Roman, serif"><A href="http://www.bigcompany.com/PR/announcements/1994/dec/new-server-version.txt">http://www.bigcompany.com/PR/announcements/1994/dec/new-server-version.txt</A></FONT></P>
<P>这个还算好的，看看这个：<FONT face="Times New Roman, serif">http://www.globeandmail.com/servlet/ArticleNews/PEstory/TGAM/20020909/RVCRR/Business/business/business_temp/2/2/5/</FONT></P>
<H3 class=cjk>莫明其妙的大写字母</H3>
<P>比如：</P>
<P><FONT face="Times New Roman, serif">ftp://ftp.bigstate.edu/pub/docs/OnTBGHill.txt</FONT></P>
<H3 class=cjk>不常见的标点符号</H3>
<P><FONT face="Times New Roman, serif">ftp://ftp.bigstate.edu/pub/docs/moon_3+manual</FONT></P>
<H2 class=cjk>在纸介质上显示很困难</H2>
<P>一些字符在纸上打印出来不容易辨认，例如</P>
<P>“～”（数字键<FONT face="Times New Roman, serif">1</FONT>旁边那个键）在不同的字体下面显示不同，有时候在一行的顶部，有时候在底部。</P>
<P>“<FONT face="Times New Roman, serif">l”</FONT>（字母<FONT face="Times New Roman, serif">L</FONT>的小写版本）和“<FONT face="Times New Roman, serif">1”</FONT>（数字一）几乎无法分辨——在纸介质上的时候，同样的还有“<FONT face="Times New Roman, serif">O”</FONT>和“<FONT face="Times New Roman, serif">0”</FONT>。</P>
<P>“<FONT face="Times New Roman, serif">`”</FONT>太微小，以致于人们在某些情况下看不到它。</P>
<H2 class=cjk>主机和端口的问题</H2>
<P>除了 <FONT face="Times New Roman, serif">scheme-specific </FONT>部分，<FONT face="Times New Roman, serif">domain</FONT>和<FONT face="Times New Roman, serif">port</FONT>也可能给用户带来困惑。</P>
<P><FONT face="Times New Roman, serif">http://admin.bigstate.edu:8001/docs/thesis/jones</FONT></P>
<H1 class=cjk align=left>设计<FONT face="Arial, sans-serif">URI</FONT>应该遵循的原则</H1>
<P style="MARGIN-BOTTOM: 0cm"><FONT face="Times New Roman, serif">URI</FONT>是网站<FONT face="Times New Roman, serif">UI</FONT>的一部分，因此，可用的网站应该满足这些<FONT face="Times New Roman, serif">URL</FONT>要求</P>
<P style="MARGIN-BOTTOM: 0cm"><BR></P>
<UL>
<LI>
<P>简单，好记的域名</P>
<LI>
<P>简短（<FONT face="Times New Roman, serif">short</FONT>）的<FONT face="Times New Roman, serif">URI</FONT></P>
<LI>
<P>容易录入的<FONT face="Times New Roman, serif">URI</FONT></P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>能反应站点的结构</P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>是可以被用户猜测和<FONT face="Times New Roman, serif">hack</FONT>的（也鼓励用户如此）</P>
<LI>
<P>永久链接，<FONT face="Times New Roman, serif">Cool URI don't change</FONT></P></LI></UL>
<H2 class=cjk>聪明的选择<FONT face="Arial, sans-serif">URI</FONT></H2>
<H3 class=cjk>一定要短</H3>
<P>为了<FONT face="Times New Roman, serif">URI</FONT>能被方便的录入，写下，拼写和记忆，<FONT face="Times New Roman, serif">URI</FONT>要尽可能的短，根据<FONT face="Times New Roman, serif">w3c</FONT>提供的参考数据，一个<FONT face="Times New Roman, serif">URI</FONT>的长度最好不要超过<FONT face="Times New Roman, serif">80</FONT>个字节（这并非一个技术限制，经验和统计提供的数据），包括<FONT face="Times New Roman, serif">schema</FONT>和<FONT face="Times New Roman, serif">host,port</FONT>等。</P>
<H3 class=cjk>大小写策略</H3>
<P><FONT face="Times New Roman, serif">URI</FONT>的大小写策略要适当，要么全部小写，要么首字母大写，应避免混乱的大小写组合，在<FONT face="Times New Roman, serif">Unix</FONT>世界，文件路径队大小写是敏感的，而在<FONT face="Times New Roman, serif">Windows</FONT>世界，则不对大小写敏感，所以，<FONT face="Times New Roman, serif">http://www.example.com/FOO</FONT>和<FONT face="Times New Roman, serif">http://www.example.com/foo</FONT>是两个不同的<FONT face="Times New Roman, serif">URI</FONT>（尽管他们在<FONT face="Times New Roman, serif">Windows</FONT>平台有相同的含义）</P>
<H2 class=cjk>允许<FONT face="Arial, sans-serif">URI</FONT>管理</H2>
<H3 class=cjk><FONT face="Arial, sans-serif">URI</FONT>映射</H3>
<P>管理员可以重新组织服务器上的文件系统结构，而无需改动<FONT face="Times New Roman, serif">URI</FONT>，这就需要<FONT face="Times New Roman, serif">URI</FONT>和真实的服务器文件系统结构之间有一个映射机制，而不是生硬的对应。</P>
<P>这种映射机制可以通过如下技术手段实现：</P>
<P><FONT face="Times New Roman, serif">Aliases</FONT>，别名，<FONT face="Times New Roman, serif">Apache</FONT>上的目录别名，<FONT face="Times New Roman, serif">IIS</FONT>上的虚拟目录</P>
<P><FONT face="Times New Roman, serif">Symbolic links</FONT>，符号链接，<FONT face="Times New Roman, serif">Unix</FONT>世界的符号链接</P>
<P><FONT face="Times New Roman, serif">Table or database of mappings</FONT>，数据库映射，<FONT face="Times New Roman, serif">URI</FONT>和文件系统结构的对应关系存储在数据库中</P>
<H3 class=cjk>标准的重定向</H3>
<P>管理员可以简单的通过修改<FONT face="Times New Roman, serif">HTTP</FONT>状态代码来实现服务器文件系统结构变更之后的<FONT face="Times New Roman, serif">URI</FONT>兼容，可以利用的<FONT face="Times New Roman, serif">HTTP Status Code</FONT>有：</P>
<P><FONT face="Times New Roman, serif">301 Moved Permanently ([RFC2616] section 10.3.2)</FONT></P>
<P><FONT face="Times New Roman, serif">302 Found (undefined redirect scheme, [RFC2616] Section 10.3.3)</FONT></P>
<P><FONT face="Times New Roman, serif">Temporary Redirect ([RFC2616] Section 10.3.8)</FONT></P>
<H2 class=cjk>用独立的<FONT face="Arial, sans-serif">URI</FONT></H2>
<H3 class=cjk>技术无关的<FONT face="Arial, sans-serif">URI</FONT></H3>
<UL>
<LI>
<P>提供动态内容服务时，应使用技术无关的<FONT face="Times New Roman, serif">URI</FONT></P>
<P>即<FONT face="Times New Roman, serif">URI</FONT>不暴露服务器端使用的脚本语言，平台引擎，而这些语言，平台，引擎的变化也不会导致<FONT face="Times New Roman, serif">URI</FONT>的变更。因此，<FONT face="Times New Roman, serif">sevelet,cgi-bin</FONT>之类的单词不应该出现在<FONT face="Times New Roman, serif">URI</FONT>中。</P>
<LI>
<P>提供静态内容服务时，应当隐去文件的扩展名</P>
<P>取而代之的技术是<FONT face="Times New Roman, serif">content-negotiation, proxy, </FONT>和<FONT face="Times New Roman, serif">URI mapping</FONT></P></LI></UL>
<H3 class=cjk>身份标志和<FONT face="Arial, sans-serif">Session</FONT>机制</H3>
<UL>
<LI>
<P>使用标准的身份认证机制，而不是每个用户一个特定的<FONT face="Times New Roman, serif">URI</FONT></P>
<LI>
<P>使用标准的<FONT face="Times New Roman, serif">Session</FONT>机制，而不是把<FONT face="Times New Roman, serif">Session ID</FONT>放在<FONT face="Times New Roman, serif">URI</FONT>中</P>
<P>使用<FONT face="Times New Roman, serif">Tomcat</FONT>和<FONT face="Times New Roman, serif">PHP3</FONT>的站点容易犯这类错误，将<FONT face="Times New Roman, serif">Session ID</FONT>放在<FONT face="Times New Roman, serif">URI</FONT>中，实际上，他们应当用<FONT face="Times New Roman, serif">HTTP Header</FONT>来实现之。</P></LI></UL>
<H2 class=cjk>内容变更时使用标准转向</H2>
<H3 class=cjk>对变更的内容使用标准的重定向</H3>
<H3 class=cjk>对删除的资源使用<FONT face="Arial, sans-serif">HTTP410</FONT></H3>
<H2 class=cjk>提供索引代理</H2>
<H3 class=cjk>索引策略</H3>
<H3 class=cjk><FONT face="Arial, sans-serif">Content-Location</FONT></H3>
<H3 class=cjk><FONT face="Arial, sans-serif">Content-MD5</FONT></H3>
<H2 class=cjk>提供适当的缓存信息</H2>
<H3 class=cjk>缓存相关的<FONT face="Arial, sans-serif">HTTP</FONT>头</H3>
<H3 class=cjk>缓存策略</H3>
<H3 class=cjk>缓存生成内容</H3>
<H3 class=cjk><FONT face="Arial, sans-serif">HTTP HEAD</FONT>和<FONT face="Arial, sans-serif">HTTP GET</FONT></H3>
<H1 class=cjk>总结</H1>
<P>本文详细描述了<FONT face="Times New Roman, serif">URI</FONT>的定义和作用，揭示了目前<FONT face="Times New Roman, serif">Web</FONT>开发中普遍存在的问题，并给出了<FONT face="Times New Roman, serif">URI</FONT>设计原则和规范，希望本文的读者能在开发和设计<FONT face="Times New Roman, serif">Web</FONT>应用程序的时候体会和运用这些知识。</P>
<P><BR><BR></P>
<UL>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>是<FONT face="Times New Roman, serif">Web UI</FONT>的一部分，应当像对待网站<FONT face="Times New Roman, serif">Logo</FONT>和公司品牌一样对待它</P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>是网站和普通用户之间的唯一接口，应当像对待你的商务电话号码一样对待它</P></LI></UL>
<P>读懂并记住上面两句话，你下次设计<FONT face="Times New Roman, serif">URI</FONT>的时候就会给它应有的重视了。<BR></P>
<UL>
<LI>
<P><FONT face="Times New Roman, serif">URL</FONT>应当是用户友好的</P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>应当是可读的</P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>应当是可预测的、可删减的</P>
<LI>
<P><FONT face="Times New Roman, serif">URI</FONT>应当是统一的</P></LI></UL>
<P>读懂和记住上面四句话，你就知道应该设计什么样的<FONT face="Times New Roman, serif">URI</FONT>了。</P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=217" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=217</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[防止动网论坛群发的解决方法]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-07-18T16:55:00+08:00</updated>
	  <published>2008-07-18T16:55:00+08:00</published>
		  <summary type="html"><![CDATA[<P>目前，很多的群发软件，大行其道，到处群发，特别是使用动网论坛的朋友，每天群发的垃圾广告非常之多，删都删到手软。更有甚者，群发的都是些违法信息。对此，使用动网论坛的朋友可能都深恶痛绝。</P>
<P>但有什么办法呢，改验证码图片方式？似乎作用不大，验证码对有些能识别的软件来讲形同虚设，没点用处。</P>
<P>群发软件针对使用某程序系统的网站，能够进行大批量的群发，无非是提交表单POST参数及地址基本上都一样，唯一不同的仅仅是域名。针对这种情况，可以适当修改下表单中字段项的name属性，或是页面表单提交到的名称，基本上就可以屏蔽某些群发软件。</P>
<P>但是如果群发软件具备自动获取表单中的字段项名称及提交地址的功能，怎么改没用，这个功能从技术上来讲，实现并不复杂。</P>
<P>知道了群发的一些基础知识，我们很容易想到解决方法。比如：如果表单中每次要提交的表单项都不同，群发软件就没办法处理了，其实不是没办法，只是相对复杂了些（先要抓取表单页，并进行表单项分析），他们不会仅仅为了你一个网站，而修改程序的。</P>
<P>我的解决方法是：表单的提交地址通过JS输出，增加一个随机参数名及其随机值，这个参数值及其名称在提交处理页进行验证，注意，JS所在的位置并不在表单内部，一般可加在表单验证的JS里面。经测试，该方法非常适用。</P>
<P>下面是针对动网论坛做点一些程序及其模板上的修改：</P>
<P>1、修改POST.asp页面：</P>
<P>先在代码的最下边加入2个随机函数：</P>
<P><FONT face=Verdana>Function getRnd( max , min )<BR>Dim i<BR>randomize<BR>i = Int((max - min + 1) * Rnd + min)<BR>getRnd = i<BR>End Function</FONT></P>
<P><FONT face=Verdana>Function getRndChar( num )<BR>Dim chars,ret,tmp,numIndex,i<BR>chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"<BR>For i=0 To num<BR>&nbsp;Randomize<BR>&nbsp;numIndex = Int((36 - 1 + 1) * Rnd + 1)<BR>&nbsp;tmp = Mid(CHARS , numIndex , 1 )<BR>&nbsp;ret = ret &amp; tmp<BR>Next<BR>getRndChar = ret<BR>End Function</FONT></P>
<P>再在该文件的188行左右，插入下面的代码：</P>
<P><FONT face=Verdana>'替换随机的注册参数<BR>&nbsp;&nbsp;session("regRndChars") = getRndChar( 6 )<BR>&nbsp;&nbsp;session("reg_b") = getRnd(9999,1000)<BR>&nbsp;&nbsp;session("reg_c") = getRnd(100 , 10 )<BR>&nbsp;&nbsp;TempStr=Replace(TempStr,"{$rndparam}",session("regRndChars"))<BR>&nbsp;&nbsp;TempStr=Replace(TempStr,"{$value1}",session("reg_b"))<BR>&nbsp;&nbsp;TempStr=Replace(TempStr,"{$value2}",session("reg_c"))</FONT></P>
<P>2、修改savepost.asp文件：</P>
<P>在该文件47行插入：</P>
<P><FONT face=Verdana>Dim regNums<BR>regNums = session("reg_b") * session("reg_c")<BR>If Request(session("regRndChars")) = "" or Request(session("regRndChars"))&lt;&gt;CStr(regNums) Then<BR>&nbsp;Response.write "发帖失败!"<BR>&nbsp;Response.end<BR>End If</FONT></P>
<P>3、修改dispbbs.asp&nbsp; 873行下面，加入：</P>
<P><FONT face=Verdana>'替换随机的参数<BR>&nbsp;session("regRndChars") = getRndChar( 6 )<BR>&nbsp;session("reg_b") = getRnd(9999,1000)<BR>&nbsp;session("reg_c") = getRnd(100 , 10 )<BR>&nbsp;sTemplate=Replace(sTemplate,"{rndparam}",session("regRndChars"))<BR>&nbsp;sTemplate=Replace(sTemplate,"{value1}",session("reg_b"))<BR>&nbsp;sTemplate=Replace(sTemplate,"{value2}",session("reg_c"))</FONT></P>
<P>4、修改模板文件：</P>
<P>分页面模板(page_post)：template.html(0)29行左右改成</P>
<P><FONT face=Verdana>function PostSubmit(frm,e){<BR>&nbsp;//随机参数<BR>&nbsp;var a = '{$rndparam}';<BR>&nbsp;var b= {$value1},c={$value2};<BR>&nbsp;frm.action += '&amp;' + a + '=' + (b*c);<BR>&nbsp;var Post=new DvSavePost(frm,e,'{$ispostnew}'=='1'?'full':'fastre',{$maxtitlelength},{$maxconlength});<BR>&nbsp;gid('submit').disabled=true;<BR>&nbsp;if ('function'==typeof checkPay){Post.isok=checkPay()}<BR>&nbsp;gid('body').value=dvtextarea.save();<BR>&nbsp;Post.chk_topic(gid('topic'));<BR>&nbsp;Post.chk_flash();<BR>&nbsp;Post.chk_content(gid('body'));<BR>&nbsp;if (frm.topicmode&amp;&amp;frm.selecttmode){Post.chk_topicmode(frm.topicmode,frm.selecttmode);}<BR>&nbsp;if(!(Post.send())){gid('submit').disabled=false;}<BR>}</FONT></P>
<P>分页面模板(page_dispbbs) ：template.html(0) 210行左右，改成</P>
<P><FONT face=Verdana>function FastReplySubmit(frm,e){<BR>&nbsp;gid('body').value=dvtextarea.save();<BR>&nbsp;gid('submit').disabled=true;<BR>&nbsp;//随机参数<BR>&nbsp;var a = '{rndparam}';<BR>&nbsp;var b= {value1},c={value2};<BR>&nbsp;frm.action += '&amp;' + a + '=' + (b*c);<BR>&nbsp;var FastRE=new DvSavePost(frm,e,'fastre');<BR>&nbsp;FastRE.chk_topic(gid('topic'));<BR>&nbsp;FastRE.chk_content(gid('body'));<BR>&nbsp;if(!FastRE.send()){<BR>&nbsp;&nbsp;gid('submit').disabled=false;<BR>&nbsp;}<BR>}</FONT></P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=216" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=216</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[模板引擎的作用]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=9" label="CMS" /> 
	  <updated>2008-07-02T16:44:02+08:00</updated>
	  <published>2008-07-02T16:44:02+08:00</published>
		  <summary type="html"><![CDATA[<P>模板引擎有什么用呢？我们先来看看目前的模板引擎都是用在了什么地方。</P>
<P>最常见的就是用在WEB系统中，可以让程序开发人员及美工设计人员分工明确，这也是MVC开发模式不可少的。</P>
<P>再就是用在代码生成上，通过设置模板，可以大量减轻机械重复的手工操作，提供工作效率。</P>
<P>模板引擎的设计目的，无非是要让不懂程序的设计人员，不用关心程序逻辑是怎么实现，只用关心自己的界面呈现。但是设计人员必须要学习模板引擎使用方法，包括模板语法、模板变量、甚至有些变量或参数在设计模板时需要跟程序员协商好，该使用哪些变量、如何使用等等。</P>
<P>试想一下，如果模板引擎复杂到一定程度，无异于要设计人员学习一种新的程序语言，而模板页面必定会包含一些类似于ASP、PHP一样的脚本语言，仿佛又回到了代码与界面夹杂在一起的年代，不同的是，这些都是设计人员来做的。</P>
<P>所以，个人认为，模板引擎不能太复杂，但也必须具备一些程序语言的基本语法语句，比如：判断语句、循环语句等等。目前一般的CMS系统所谓的模板标签功能，其解析过程称不上什么模板引擎。一个好的模板引擎，应该具有通用性、灵活性、扩展性，当然在一个具体的应用中，设计适合自己的模板引擎，就是最好的模板引擎。</P>
<P>&nbsp;</P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=215" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=215</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[HttpWebRequest客户端设置附加Cookie请求网页]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=6" label=".Net" /> 
	  <updated>2008-06-27T01:45:57+08:00</updated>
	  <published>2008-06-27T01:45:57+08:00</published>
		  <summary type="html"><![CDATA[<P>前文“<A class=titleA href="http://www.zhangyongjun.com/blog/article.asp?id=154">asp.net&nbsp;程序自动提交登陆表单并保持Session及Cookie</A> ”说到了通过WEB程序提交表单的方法，大体思路是获取<FONT face=Verdana>HttpWebRequest客户端</FONT>登陆后的Cookie，并附加到下次请求的CookieContainer中。这样做确实比较麻烦，每次都要重复请求登陆页获得Cookie。当然我们可以将这个登陆后获得的CookieContainer保存起来，至于保存到哪里都无所谓，如果要持久的话，保存到数据库中是最好的。</P>
<P>现在的情况是，如果我们已经知道了登陆后的Cookie，下次请求时将这些COOKIE直接附加到CookieContainer，是不是更方便呢？至少程序上少了获取Cookie的代码，界面上也不需要设置登陆表单的提交参数。</P>
<P>要知道登陆后Cookie的方法很多，用IE浏览器打开登陆页并登陆后，系统当前用户目录Cookies下都留下了记录，你也可以通过一些辅助工具来获取Cookie。</P>
<P>我们来看看代码上如何实现的：</P>
<P>//实例化CookieContainer对象<BR><FONT face=Verdana>System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();<BR>//设置附加的Cookie<BR>cookieContainer.SetCookies( new Uri( "请求的网址URL") , "Cookie实例字符串，每个实例以逗号分隔");<BR>//请求时，带上这个CookieContainer<BR>......<BR><FONT face=Verdana>// 将提交的字符串数据转换成字节数组<BR>&nbsp;&nbsp;&nbsp;byte[] postData = encoding.GetBytes(postString);<BR>&nbsp;&nbsp;&nbsp;// 设置提交的相关参数<BR>&nbsp;&nbsp;&nbsp;HttpWebRequest request = WebRequest.Create( url ) as HttpWebRequest;<BR>&nbsp;&nbsp;&nbsp;request.Referer = url;<BR>&nbsp;&nbsp;&nbsp;&nbsp;request.CookieContainer = cookieContainer ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;request.Method = method.ToUpper();<BR>......</FONT></FONT></P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=214" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=214</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Google判断网页优质的一些标准]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-06-27T01:11:48+08:00</updated>
	  <published>2008-06-27T01:11:48+08:00</published>
		  <summary type="html"><![CDATA[(SEO)<P>现在还在看到很多人在使用google的PageRank来判断一个网页的好坏， 当你还在为那个绿色小条欢呼雀跃的时候，当你还在一次次的下载google工具，我想告诉你： 你不要在沉迷在这样无聊的游戏中。那只是一种娱乐。 </P><P>　　那么什么样的网站会获得比较好的排名，或者说怎么去辨别google的网页质量好坏的标准呢？根据我的实际经验，这些是google 可能是提高你网页排名的一些关键要素：</P><P>　　1、成为一个新闻源</P><P>　　这绝对是一个非常重要的要素，因为一旦你成为这个行业或者说提供消息的来源泉，那么你的站将被google视为一个权威站点，而你的竞争对手和寻找信息来源的同行的站点就是宣传你的站的最佳渠道，他们将为你的站点的宣传起到关键作用，关于网页的内容，我希望大家还能注意一下几个方面：</P><P>　　⑴更新速度　经常更新你的站点，最长不能超过3周，能保持每周更新一次以上是最佳的。</P><P>　　⑵字节的限制　这点是在国外已经得到证实，他们认为一篇文章的字节不能小于200个字节，否则google有可能会认为你作弊，从而限制其排名。如果兑换成中文字数是50-100个左右。这点请大家注意。</P><P>　　⑶注意需要原创　这里的原创就是是一个模糊的定义，含义就是你的文章要有权威性和一定的创意，说通俗点叫人无我有，而不是简单的拷贝其他人的页面或者内容，很大程度上，google的算法已经能从来源确定其是否为原创 。</P><P>　　2、网站内容之间要有其联系</P><P>　　这个我曾经在网页信噪比的研究和再谈网页信噪比中也提到过，现在搜索引擎已经能自主的分辨出你的主题和网页的研究方向，那么你网站互相之间的联系就有可能成为google算法中将你列到相对应的关键字列表中，从而获得其良好排名，这就使得设计和策划者在网站开始之初尽量将网站做的专业，相互之间要有某种直接和非直接的联系。那么这样的设计有可能增加你主题的强度。</P><P>　　3、网页之间有良好的链接</P><P>　　这个相信不用我多说，大家都能知道，在google的搜索过程中分为深度搜索和泛度搜索，只有当你的网页之间有良好的链接，让搜索引擎更好的索引你的站点，记住，千万不要将google的机器人反复的指向你其中的一个页面，那样会造成机器人的搜索的迟缓，对你的排名没有任何的好处，而且这会使google在反复的索引中认为你是在制造一个“spam”工厂！</P><P>　　而我也提倡的是一种链式结构，就如同大家在许多门户站点都能看到的相关信息一样，相关新闻会出现在正文文本的下侧或者两侧，这样第一会对页面进行文本的加强，第二还能增加其索引程度。</P><P>　　4、缩短网页与首页的直接距离</P><P>　　这一点大家可以参考zac“优化网站结构”一文，里面对网站结构有详细的分析。我需要说明的是搜索引擎机器人在爬行的过程中，不会自动去找寻一个没有链接的页面，一个优质的网站，应该有良好的逻辑结构。</P><P>　　5、合理的利用网站中的文字来进行链接</P><P>　　我的深刻感受是，其浏览者在浏览你的站获得有效信息，做链接的时候只会是你站点中的新闻的某一部分和新闻的title部分，而且不会是你站的首页，是你内页中的一页。那么需要你在追求这些有效的的链接的同时，注意链接的文字的描述，这样你有可能获得十分重要的链接。</P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=213" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=213</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[如何知道GOOGLE在什么时候更新呢？GOOGLE DANCE]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-06-27T01:04:47+08:00</updated>
	  <published>2008-06-27T01:04:47+08:00</published>
		  <summary type="html"><![CDATA[(SEO)<P>很多时候，我们希望知道GOOGLE什么时候更新，比如</P><P>自己的网站刚刚增加了很多页面，希望知道GOOGLE下次更新会索引多少页 <BR>刚刚和几个不错的网站做了连接，希望知道GOOGLE下次更新后PR会不会长 <BR>如果要把网站的HTML页面重新生成，应该避开GOOGLE更新的时候，因为那样可能因为过多的404而导致GOOGLE删除页面 <BR>……<BR>如何知道GOOGLE在什么时候更新呢？</P><P>GOOGLE研究者们发现了一个很简单的办法，就是查看GOOGLE的几个镜像站点是否相同，因为在GOOGLE更新期间，他总是将www2.google.com或者www3.google.com作为更新测试站点，在这期间，后两个站点中索引的页面数量和主站点将会不同。比如当我们从</P><P>www.google.com/　www2.google.com/　www3.google.com</P><P>三个网站搜索同一个关键词，得到的结果的数量不相同，这就说明GOOGLE正在更新。</P><P>GOOGLE这种大规模的更新在国外被称为GOOGLE DANCE（狗狗跳舞），有一个专门协助我们检查他是否正在跳舞的网站</P><P>http://www.google-dance-tool.com</P><P>这个网站提供一个工具，通过这个工具，我们只需要输入一个关键词然后点击一个按钮，就可以看到GOOGLE三个镜像站点的搜索结果，很方便我们对比。</P><P>通过这个办法，我知道了上次GOOGLE更新是在一月底二月初，我和几个朋友目睹了他们各自网站被GOOGLE索引的页面的数目的变化。昨天晚上检查了一下，发现在三个镜像站点上搜索“统计”、“下载”这些关键词的结果不相同，说明GOOGLE又开始活跃了。</P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=212" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=212</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[搜索引擎优化-神经网络算法]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-06-27T00:44:24+08:00</updated>
	  <published>2008-06-27T00:44:24+08:00</published>
		  <summary type="html"><![CDATA[(SEO)<FONT id=remark_view style="FONT-SIZE: 14px"> 
<P>搜索引擎优化-神经网络算法</P>
<P><STRONG>神经网络算法是什么?<BR></STRONG>神经网络是新技术领域中的一个时尚词汇。很多人听过这个词，但很少人真正明白它是什么。本文的目的是介绍所有关于神经网络的基本包括它的功能、一般结构、相关术语、类型及其应用。 <BR><BR>“神经网络”这个词实际是来自于生物学，而我们所指的神经网络正确的名称应该是“人工神经网络（ANNs）”。在本文，我会同时使用这两个互换的术语。 <BR><BR>一个真正的神经网络是由数个至数十亿个被称为神经元的细胞（组成我们大脑的微小细胞）所组成，它们以不同方式连接而型成网络。人工神经网络就是尝试模拟这种生物学上的体系结构及其操作。在这里有一个难题：我们对生物学上的神经网络知道的不多！因此，不同类型之间的神经网络体系结构有很大的不同，我们所知道的只是神经元基本的结构。 </P>
<P><STRONG>搜索引擎中的神经算法:</STRONG><BR>把<FONT color=#b3d826>搜索引擎</FONT>的算法比譬人的大脑，大脑中有大约50到500种不同得神经元，由N多的因素构成一张神经网络系统，也就是搜索引擎的算法组成。风采依扬以为在搜索引擎神经网络系统中，由N多个关键字相关性的网站/页面组成一张搜索引擎神经算法，每一个神经元占神经网络系统中的比例不一样。当然最近一些搜索引擎加入了用户行为算法，而用户行为算法也会被纳入神经算法中的。<BR>神经算法的原理：<BR>基本神经元包含有synapses、soma、axon及dendrites。Synapses负责神经元之间的连接，它们不是直接物理上连接的，而是它们之间有一个很小的空隙允许电子讯号从一个神经元跳到另一个神经元。然后这些电子讯号会交给soma处理及以其内部电子讯号将处理结果传递给axon。而axon会将这些讯号分发给dendrites。最后，dendrites带着这些讯号再交给其它的synapses，再继续下一个循环。 不断的从各个神经元挖掘数据，组成各个分类及编码，由各个分类入编码构成搜索引擎神经算法的一些大体组成要素，最后将分析结果形成一个神经指纹，当用户搜索时将调用搜索引擎的神经指纹，由神经指坟显示出搜索结果。</P>
<P>以上内容是跟星箭沟通时自已的对搜索引擎神经算法的一些了解。呵呵而神经指纹我想可以是我独创哦。。。。。<BR></P></FONT>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=211" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=211</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Internet Explorer无法打开站点,已终止操作]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-06-23T00:26:01+08:00</updated>
	  <published>2008-06-23T00:26:01+08:00</published>
		  <summary type="html"><![CDATA[<DIV class=postcontent>在页面还没有ready的时候就调用了htmlObject的appendChild或者innerHTML操作，这样会在IE上弹出一个对话框：“Internet Explorer无法打开站点,已终止操作” 
<P>　　在网上搜索了一下，解决方法大概为以下两点：</P>
<P>　　(1)在appendChild或者innerHTML操作处判断document.readyState=="complete", 若为否，则setTimeout若干秒之后重新作这个操作。但是，此属性只对ie，opeara有效，firefox的document没有readyState属性，永远是undefined。</P>
<P>　　(2)在script中使用defer属性。意在页面加载完毕后再执行脚本,这样可以避免找不到对象的问题。defer不会考虑外部文件是否全部下载完，只会判当前页面是否全部加载完成。并且，在有defer标签的代码块里不能写document.write方法。以下为要注意的问题：</P>
<P>1.使用了defer="true"属性的script标签应该放在&lt;head&gt;&lt;/head&gt;之间。如果放在Body之间可能会得不到预期的效果（我试过如果把script放body里，在页面加载的第一次不会起defer的作用，但之后的刷新defer却起作用）。</P>
<P>2.使用了defer="true"属性的script标签里面包含的脚本在运行的过程中，不能使用document.write()方法向页面输出内容。因为设置了defer="true"的脚本是页面加载之后才加载并渲染的.如果这时候使用document.write()方法,会把之前的页面内容都清掉（当然，如果有这个需要的情况除外）。</P></DIV>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=210" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=210</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[JSON对象定义的格式]]></title>
	  <author>
		 <name>achely</name>
		 <uri>http://www.zhangyongjun.com/blog/</uri>
		 <email>achely@gmail.com</email>
	  </author>
	  <category term="" scheme="http://www.zhangyongjun.com/blog/default.asp?cateID=12" label="Web开发" /> 
	  <updated>2008-06-18T01:57:42+08:00</updated>
	  <published>2008-06-18T01:57:42+08:00</published>
		  <summary type="html"><![CDATA[<P>知道了JSON对象格式的定义，我们就很容易的通过服务器端程序动态输出JSON字符串到客户端。</P>
<P>先看看下面的例子：</P><FONT face=Verdana>
<P><BR>{items:[&nbsp;&nbsp;&nbsp;&nbsp; <BR>{&nbsp;&nbsp;&nbsp;&nbsp; <BR>id:1,&nbsp;&nbsp;&nbsp;&nbsp; <BR>author:\"Achely\",&nbsp;&nbsp;&nbsp; <BR>url:\"http://www.zhangyongjun.com\",&nbsp;&nbsp;&nbsp; <BR>content:\"Welcome to Achely blog\"&nbsp;&nbsp;&nbsp; <BR>},&nbsp;&nbsp;&nbsp; <BR>{&nbsp;&nbsp;&nbsp; <BR>id:2,&nbsp;&nbsp;&nbsp; <BR>author:\"Achely2\",&nbsp;&nbsp;&nbsp; <BR>url:\"http://www.zhangyongjun.com\",&nbsp;&nbsp;&nbsp; <BR>content:\"Welcome to Achely blog\"&nbsp;&nbsp;&nbsp; <BR>}&nbsp;&nbsp;&nbsp;&nbsp; <BR>]};&nbsp;&nbsp;&nbsp; </P>
<P>与之对应的XML格式：</P><FONT face=Verdana>
<P><BR>&lt;items&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;item&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;1&lt;/id&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;author&gt;Achely&lt;/author&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://www.zhangyongjun.com&lt;/url&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;content&gt;Welcome to Achely blog&lt;/content&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/item&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;item&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id&gt;2&lt;/id&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;author&gt;Relkn&lt;/author&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;http://www.zhangyongjun.com&lt;/url&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;content&gt;Welcome to Achely blog&lt;/content&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/item&gt;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&lt;/items&gt;</P>
<P>通过上面，我们不难看出：</P></FONT></FONT>
<P>1、对象: <BR>{name:"achely",email:"achely@gmail.com",homepage:"http://www.zhangyongjun.com"} <BR>{&nbsp;属性&nbsp;:&nbsp;值&nbsp;,&nbsp;属性&nbsp;:&nbsp;值&nbsp;,&nbsp;属性&nbsp;:&nbsp;值&nbsp;} </P>
<P><BR>2、数组是有顺序的值的集合。一个数组开始于"["，结束于"]"，值之间用","分隔。 <BR>[ <BR>{name:"achely",email:"achely@gmail.com",homepage:"http://www.zhangyongjun.com"},&nbsp;{name:"achely",email:"achely@gmail.com",homepage:"http://www.zhangyongjun.com"}, <BR>{name:"achely",email:"achely@gmail.com",homepage:"http://www.zhangyongjun.com"} <BR>] </P>
<P><BR>3、值可以是字符串、数字、true、false、null，也可以是对象或数组。这些结构都能嵌套。</P>
<P>那么，在客户端的JS中如何访问JSON对象呢？</P>
<P>js中这样的定义：</P>
<P>var obj='{name:"achely",email:"achely@gmail.com",homepage:"http://www.zhangyongjun.com"} ';</P>
<P>属性访问：obj.name</P>
<P>数组访问：obj.array[i]</P>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.zhangyongjun.com/blog/default.asp?id=209" /> 
	  <id>http://www.zhangyongjun.com/blog/default.asp?id=209</id> 
  </entry>	
		
</feed>