??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成人亚洲影院在线观看,亚洲人成网站18禁止,亚洲国产主播精品极品网红http://www.tkk7.com/123xxx/category/7296.htmljust for javazh-cnSat, 11 Aug 2007 21:18:42 GMTSat, 11 Aug 2007 21:18:42 GMT60java~码问题http://www.tkk7.com/123xxx/articles/java_encoding.htmlOOOOTue, 03 Apr 2007 02:25:00 GMThttp://www.tkk7.com/123xxx/articles/java_encoding.htmlhttp://www.tkk7.com/123xxx/comments/108137.htmlhttp://www.tkk7.com/123xxx/articles/java_encoding.html#Feedback0http://www.tkk7.com/123xxx/comments/commentRss/108137.htmlhttp://www.tkk7.com/123xxx/services/trackbacks/108137.html字符Q字节和~码

[原创文章Q{载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm]

U别Q中U?/p>

摘要Q本文介l了字符与编码的发展q程Q相x늚正确理解。D例说明了一些实际应用中Q编码的实现Ҏ(gu)。然后,本文讲述了通常对字W与~码的几U误解,׃q些误解而导致ؕ码生的原因Q以及消除ؕ码的办法。本文的内容늛?#8220;中文问题”Q?#8220;q问题”?/p>

掌握~码问题的关键是正确地理解相x念,~码所涉及的技术其实是很简单的。因此,阅读本文旉要慢d惻I多思考?/p>

引言

“字符与编?#8221;是一个被l常讨论的话题。即使这P时常出现的ؕ码仍然困扰着大家。虽然我们有很多的办法可以用来消除ؕ码,但我们ƈ不一定理解这些办法的内在原理。而有的ؕ码生的原因Q实际上׃底层代码本n有问题所D的。因此,不仅是初学者会对字W编码感到模p,有的底层开发h员同样对字符~码~Z准确的理解?/p>

1. ~码问题的由来,相关概念的理?/h4>

1.1 字符与编码的发展

从计机对多国语a的支持角度看Q大致可以分Z个阶D:

  pȝ内码 说明
阶段一 ASCII 计算机刚开始只支持pQ其它语a不能够在计算Z存储和显C?/td> 英文 DOS
阶段?/td> ANSI~码
Q本地化Q?/td>
Z计算机支持更多语aQ通常使用 0x80~0xFF 范围?2 个字节来表示 1 个字W。比如:汉字 '? 在中文操作系l中Q?[0xD6,0xD0] q两个字节存储?br>
不同的国家和地区制定了不同的标准Q由此生了 GB2312, BIG5, JIS {各自的~码标准。这些?2 个字节来代表一个字W的各种汉字延׾~码方式Q称?strong> ANSI ~码。在体中文系l下QANSI ~码代表 GB2312 ~码Q在日文操作pȝ下,ANSI ~码代表 JIS ~码?br>
不同 ANSI ~码之间互不兼容Q当信息在国际间交流Ӟ无法属于两U语a的文字,存储在同一D?strong> ANSI ~码的文本中?/td>
中文 DOSQ中?Windows 95/98Q日?Windows 95/98
阶段?/td> UNICODE
Q国际化Q?/td>
Z使国际间信息交流更加方便Q国际组l制定了 UNICODE 字符?/strong>Qؓ各种语言中的每一个字W设定了l一q且唯一的数字编P以满语言、跨q_q行文本转换、处理的要求?/td> Windows NT/2000/XPQLinuxQJava

字符串在内存中的存放Ҏ(gu)Q?/p>

?ASCII 阶段Q?strong>单字节字W串使用一个字节存放一个字W(SBCSQ。比如,"Bob123" 在内存中为:

42 6F 62 31 32 33 00
B o b 1 2 3 \0

在?ANSI ~码支持多种语言阶段Q每个字W用一个字节或多个字节来表C(MBCSQ,因此Q这U方式存攄字符也被UC多字节字W?/strong>。比如,"中文123" 在中?Windows 95 内存中ؓ7个字节,每个汉字?个字节,每个英文和数字字W占1个字节:

D6 D0 CE C4 31 32 33 00
?/td> ?/td> 1 2 3 \0

?UNICODE 被采用之后,计算机存攑֭W串Ӟ改ؓ存放每个字符?UNICODE 字符集中的序受目前计机一般?2 个字节(16 位)来存放一个序PDBCSQ,因此Q这U方式存攄字符也被UC宽字节字W?/strong>。比如,字符?"中文123" ?Windows 2000 下,内存中实际存攄?5 个序P

2D 4E 87 65 31 00 32 00 33 00 00 00      ← ?x86 CPU 中,低字节在?/font>
?/td> ?/td> 1 2 3 \0  

一共占 10 个字节?/p>

1.2 字符Q字节,字符?/h5>

理解~码的关键,是要把字W的概念和字节的概念理解准确。这两个概念Ҏ(gu)hQ我们在此做一下区分:

  概念描述 举例
字符 Z使用的记P抽象意义上的一个符受?/td> '1', '?, 'a', '$', 'K?, ……
字节 计算Z存储数据的单元,一?位的二进制数Q是一个很具体的存储空间?/td> 0x01, 0x45, 0xFA, ……
ANSI
字符?/td>
在内存中Q如?#8220;字符”是以 ANSI ~码形式存在的,一个字W可能用一个字节或多个字节来表C,那么我们U这U字W串?ANSI 字符?/strong>或?strong>多字节字W串?/td> "中文123"
Q占7字节Q?/span>
UNICODE
字符?/td>
在内存中Q如?#8220;字符”是以?UNICODE 中的序号存在的,那么我们U这U字W串?UNICODE 字符?/strong>或?strong>宽字节字W串?/td> L"中文123"
Q占10字节Q?/span>

׃不同 ANSI ~码所规定的标准是不相同的Q因此,对于一个给定的多字节字W串Q我们必ȝ道它采用的是哪一U编码规则,才能够知道它包含了哪?#8220;字符”。而对?UNICODE 字符?/strong>来说Q不在什么环境下Q它所代表?#8220;字符”内容L不变的?/p>

1.3 字符集与~码

各个国家和地区所制定的不?ANSI ~码标准中,都只规定了各自语a所需?#8220;字符”。比如:汉字标准QGB2312Q中没有规定韩国语字W怎样存储。这?ANSI ~码标准所规定的内容包含两层含义:

  1. 使用哪些字符。也是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符?/strong>”?
  2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储Q这个规定就叫做“~码”?

各个国家和地区在制定~码标准的时候,“字符的集?#8221;?#8220;~码”一般都是同时制定的。因此,q_我们所说的“字符?#8221;Q比如:GB2312, GBK, JIS {,除了?#8220;字符的集?#8221;q层含义外,同时也包含了“~码”的含义?/p>

UNICODE 字符?/strong>”包含了各U语a中用到的所?#8220;字符”。用来给 UNICODE 字符集编码的标准有很多种Q比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig {?/p>

1.4 常用的编码简?/h5>

单介l一下常用的~码规则Qؓ后边的章节做一个准备。在q里Q我们根据编码规则的特点Q把所有的~码分成三类Q?/p>
分类 ~码标准 说明
单字节字W编?/td> ISO-8859-1 最单的~码规则Q每一个字节直接作Z?UNICODE 字符。比如,[0xD6, 0xD0] q两个字节,通过 iso-8859-1 转化为字W串Ӟ直接得?[0x00D6, 0x00D0] 两个 UNICODE 字符Q即 "ÖÐ"?br>
反之Q将 UNICODE 字符串通过 iso-8859-1 转化为字节串Ӟ只能正常转化 0~255 范围的字W?/td>
ANSI ~码 GB2312,
BIG5,
Shift_JIS,
ISO-8859-2 ……
?UNICODE 字符串通过 ANSI ~码转化?#8220;字节?#8221;ӞҎ(gu)各自~码的规定,一?UNICODE 字符可能转化成一个字节或多个字节?br>
反之Q将字节串{化成字符串时Q也可能多个字节转化成一个字W。比如,[0xD6, 0xD0] q两个字节,通过 GB2312 转化为字W串Ӟ得?[0x4E2D] 一个字W,?'? 字?br>
“ANSI ~码”的特点:
1. q些“ANSI ~码标准”都只能处理各自语a范围之内?UNICODE 字符?br>2. “UNICODE 字符”?#8220;转换出来的字?#8221;之间的关pLZؓ规定的?/td>
UNICODE ~码 UTF-8,
UTF-16, UnicodeBig ……
?#8220;ANSI ~码”cM的,把字W串通过 UNICODE ~码转化?#8220;字节?#8221;Ӟ一?UNICODE 字符可能转化成一个字节或多个字节?br>
?#8220;ANSI ~码”不同的是Q?br>1. q些“UNICODE ~码”能够处理所有的 UNICODE 字符?br>2. “UNICODE 字符”?#8220;转换出来的字?#8221;之间是可以通过计算得到的?/td>

我们实际上没有必要去q每一U编码具体把某一个字W编码成了哪几个字节Q我们只需要知?#8220;~码”的概念就是把“字符”转化?#8220;字节”可以了。对?“UNICODE ~码”Q由于它们是可以通过计算得到的,因此Q在Ҏ(gu)的场合,我们可以M解某一U?#8220;UNICODE ~码”是怎样的规则?/p>

2. 字符与编码在E序中的实现

2.1 E序中的字符与字?/h5>

?C++ ?Java 中,用来代表“字符”?#8220;字节”的数据类型,以及q行~码的方法:

cd或操?/strong> C++ Java
字符 wchar_t char
字节 char byte
ANSI 字符?/td> char[] byte[]
UNICODE 字符?/td> wchar_t[] String
字节?#8594;字符?/td> mbstowcs(), MultiByteToWideChar() string = new String(bytes, "encoding")
字符?#8594;字节?/td> wcstombs(), WideCharToMultiByte() bytes = string.getBytes("encoding")

以上需要注意几点:

  1. Java 中的 char 代表一?#8220;UNICODE 字符Q宽字节字符Q?#8221;Q?C++ 中的 char 代表一个字节?/li>
  2. MultiByteToWideChar() ?WideCharToMultiByte() ?Windows API 函数?/li>
2.2 C++ 中相兛_现方?/h5>

声明一D字W串帔RQ?/p>
// ANSI 字符Ԍ内容长度 7 字节
char
     sz[20] = "中文123";

// UNICODE 字符Ԍ内容长度 5 ?wchar_tQ?0 字节Q?/span>
wchar_t wsz[20] = L"\x4E2D\x6587\x0031\x0032\x0033";

UNICODE 字符串的 I/O 操作Q字W与字节的{换操作:

// q行时设定当?ANSI ~码QVC 格式
setlocale(LC_ALL, ".936");

// GCC 中格?/span>
setlocale(LC_ALL, "zh_CN.GBK");

// Visual C++ 中用小?%sQ按?setlocale 指定~码输出到文?br>// GCC 中用大?%S
fwprintf(fp, L"%s\n", wsz);

// ?UNICODE 字符串按?setlocale 指定的编码{换成字节
wcstombs(sz, wsz, 20);
// 把字节串按照 setlocale 指定的编码{换成 UNICODE 字符?br>
mbstowcs(wsz, sz, 20);

?Visual C++ 中,UNICODE 字符串常量有更简单的表示Ҏ(gu)。如果源E序的编码与当前默认 ANSI ~码不符Q则需要?#pragma setlocaleQ告诉编译器源程序用的~码Q?/p>
// 如果源程序的~码与当前默?ANSI ~码不一_
// 则需要此行,~译时用来指明当前源E序使用的编?/span>
#pragma setlocale
(".936")

// UNICODE 字符串常量,内容长度 10 字节
wchar_t wsz[20] = L"中文123";

以上需要注?#pragma setlocale ?setlocale(LC_ALL, "") 的作用是不同的,#pragma setlocale 在编译时起作用,setlocale() 在运行时起作用?/p>

2.3 Java 中相兛_现方?/h5>

字符串类 String 中的内容?UNICODE 字符Ԍ

// Java 代码Q直接写中文
String
string = "中文123";

// 得到长度?5Q因为是 5 个字W?/span>
System.out.println(string.length());

字符?I/O 操作Q字W与字节转换操作。在 Java ?java.io.* 中,?#8220;Stream”l尾的类一般是用来操作“字节?#8221;的类Q以“Reader”Q?#8220;Writer”l尾的类一般是用来操作“字符?#8221;的类?/p>
// 字符串与字节串间怺转化

// 按照 GB2312 得到字节Q得到多字节字符Ԍ

byte
[] bytes = string.getBytes("GB2312");

// 从字节按?GB2312 得到 UNICODE 字符?/span>
string = new String(bytes, "GB2312");

// 要将 String 按照某种~码写入文本文gQ有两种Ҏ(gu)Q?br>
// W一U办法:?Stream cd入已l按照指定编码{化好的字节串

OutputStream os = new FileOutputStream("1.txt");
os.write(bytes);
os.close();

// W二U办法:构造指定编码的 Writer 来写入字W串
Writer ow = new OutputStreamWriter(new FileOutputStream("2.txt"), "GB2312");
ow.write(string);
ow.close();

/* 最后得到的 1.txt ?2.txt 都是 7 个字?*/

如果 java 的源E序~码与当前默?ANSI ~码不符Q则在编译的时候,需要指明一下源E序的编码。比如:

E:\>javac -encoding BIG5 Hello.java

以上需要注意区分源E序的编码与 I/O 操作的编码,前者是在编译时起作用,后者是在运行时起作用?/p>

3. 几种误解Q以及ؕ码生的原因和解军_?/h4>

3.1 Ҏ(gu)产生的误?/h5>
  对编码的误解
误解一 在将“字节?#8221;转化?#8220;UNICODE 字符?#8221;Ӟ比如在读取文本文件时Q或者通过|络传输文本ӞҎ(gu)?#8220;字节?#8221;单地作ؓ单字节字W串Q采用每“一个字?#8221;是“一个字W?#8221;的方法进行{化?br>
而实际上Q在非英文的环境中,应该?#8220;字节?#8221;作ؓ ANSI 字符Ԍ采用适当的编码来得到 UNICODE 字符Ԍ有可?#8220;多个字节”才能得到“一个字W?#8221;?br>
通常Q一直在英文环境下做开发的E序员们Q容易有q种误解?/td>
误解?/td> ?DOSQWindows 98 {非 UNICODE 环境下,字符串都是以 ANSI ~码的字节Ş式存在的。这U以字节形式存在的字W串Q必ȝ道是哪种~码才能被正地使用。这使我们Ş成了一个惯性思维Q?#8220;字符串的~码”?br>
?UNICODE 被支持后QJava 中的 String 是以字符?#8220;序号”来存储的Q不是以“某种~码的字?#8221;来存储的Q因此已l不存在“字符串的~码”q个概念了。只有在“字符?#8221;?#8220;字节?#8221;转化Ӟ或者,一?#8220;字节?#8221;当成一?ANSI 字符串时Q才有编码的概念?br>
不少的h都有q个误解?/td>

W一U误解,往往是导致ؕ码生的原因。第二种误解Q往往D本来Ҏ(gu)U正的ؕ码问题变得更复杂?/p>

在这里,我们可以看到Q其中所讲的“误解一”Q即采用?#8220;一个字?#8221;是“一个字W?#8221;的{化方法,实际上也q同于采用 iso-8859-1 q行转化。因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作Q得到原始的“字节?#8221;。然后再使用正确?ANSI ~码Q比?string = new String(bytes, "GB2312")Q来得到正确?#8220;UNICODE 字符?#8221;?/p>

3.2 ?UNICODE E序在不同语a环境间移植时的ؕ?/h5>

?UNICODE E序中的字符Ԍ都是以某U?ANSI ~码形式存在的。如果程序运行时的语a环境与开发时的语a环境不同Q将会导?ANSI 字符串的昄p|?/p>

比如Q在日文环境下开发的?UNICODE 的日文程序界面,拿到中文环境下运行时Q界面上显CZؕ码。如果这个日文程序界面改为采?UNICODE 来记录字W串Q那么当在中文环境下q行Ӟ界面上将可以昄正常的日文?/p>

׃客观原因Q有时候我们必d中文操作pȝ下运行非 UNICODE 的日文YӞq时我们可以采用一些工P比如Q南极星QAppLocale {,暂时的模拟不同的语言环境?/p>

3.3 |页提交字符?/h5>

当页面中的表单提交字W串Ӟ首先把字W串按照当前面的编码,转化成字节串。然后再每个字节{化成 "%XX" 的格式提交到 Web 服务器。比如,一个编码ؓ GB2312 的页面,提交 "? q个字符串时Q提交给服务器的内容?"%D6%D0"?/p>

在服务器端,Web 服务器把收到?"%D6%D0" 转化?[0xD6, 0xD0] 两个字节Q然后再Ҏ(gu) GB2312 ~码规则得到 "? 字?/p>

?Tomcat 服务器中Qrequest.getParameter() 得到qӞ常常是因为前面提到的“误解一”造成的。默认情况下Q当提交 "%D6%D0" l?Tomcat 服务器时Qrequest.getParameter() 返?[0x00D6, 0x00D0] 两个 UNICODE 字符Q而不是返回一?"? 字符。因此,我们需要?bytes = string.getBytes("iso-8859-1") 得到原始的字节串Q再?string = new String(bytes, "GB2312") 重新得到正确的字W串 "??/p>

3.4 从数据库d字符?/h5>

通过数据库客LQ比?ODBC ?JDBCQ从数据库服务器中读取字W串Ӟ客户端需要从服务器获知所使用?ANSI ~码。当数据库服务器发送字节流l客LӞ客户端负责将字节按照正的~码转化?UNICODE 字符丌Ӏ?/p>

如果从数据库d字符串时得到qQ而数据库中存攄数据又是正确的,那么往往q是因ؓ前面提到?#8220;误解一”造成的。解决的办法q是通过 string = new String( string.getBytes("iso-8859-1"), "GB2312") 的方法,重新得到原始的字节串Q再重新使用正确的编码{化成字符丌Ӏ?/p>

3.5 ?sh)子邮g中的字符?/h5>

当一D?Text 或?HTML 通过?sh)子邮g传送时Q发送的内容首先通过一U指定的字符~码转化?#8220;字节?#8221;Q然后再?#8220;字节?#8221;通过一U指定的传输~码QContent-Transfer-EncodingQ进行{化得到另一?#8220;字节?#8221;。比如,打开一电(sh)子邮件源代码Q可以看到类似的内容Q?/p>
Content-Type: text/plain;
        charset="gb2312"
Content-Transfer-Encoding: base64

sbG+qcrQuqO17cf4yee74bGjz9W7+b3wudzA7dbQ0MQNCg0KvPKzxqO6uqO17cnnsaPW0NDEDQoNCg==

最常用?Content-Transfer-Encoding ?Base64 ?Quoted-Printable 两种。在对二q制文g或者中文文本进行{化时QBase64 得到?#8220;字节?#8221;?Quoted-Printable 更短。在对英文文本进行{化时QQuoted-Printable 得到?#8220;字节?#8221;?Base64 更短?/p>

邮g的标题,用了一U更短的格式来标?#8220;字符~码”?#8220;传输~码”。比如,标题内容?"?Q则在邮件源代码中表CZؓQ?/p>
// 正确的标题格?/span>
Subject: =?GB2312?B?1tA=?=

其中Q?/p>

  • W一?#8220;=?”?#8220;?”中间的部分指定了字符~码Q在q个例子中指定的?GB2312?/li>
  • “?”?#8220;?”中间?#8220;B”代表 Base64。如果是“Q”则代?Quoted-Printable?/li>
  • 最?#8220;?”?#8220;?=”之间的部分,是l过 GB2312 转化成字节串Q再l过 Base64 转化后的标题内容?/li>

如果“传输~码”改ؓ Quoted-PrintableQ同P如果标题内容?"?Q?/p>
// 正确的标题格?/span>
Subject: =?GB2312?Q?=D6=D0?=

如果阅读邮g时出Cؕ码,一般是因ؓ“字符~码”?#8220;传输~码”指定有误Q或者是没有指定。比如,有的发邮件组件在发送邮件时Q标?"?Q?/p>
// 错误的标题格?/span>
Subject: =?ISO-8859-1?Q?=D6=D0?=

q样的表C,实际上是明确指明了标题ؓ [0x00D6, 0x00D0]Q即 "ÖÐ"Q而不?"??/p>

4. 几种错误理解的纠?/h4>

误解Q?#8220;ISO-8859-1 是国际编码?”

非也。iso-8859-1 只是单字节字W集中最单的一U,也就?#8220;字节~号”?#8220;UNICODE 字符~号”一致的那种~码规则。当我们要把一?#8220;字节?#8221;转化?#8220;字符?#8221;Q而又不知道它是哪一U?ANSI ~码Ӟ先暂时地?#8220;每一个字?#8221;作ؓ“一个字W?#8221;q行转化Q不会造成信息丢失。然后再使用 bytes = string.getBytes("iso-8859-1") 的方法可恢复到原始的字节丌Ӏ?/p>

误解Q?#8220;Java 中,怎样知道某个字符串的内码Q?#8221;

Java 中,字符串类 java.lang.String 处理的是 UNICODE 字符Ԍ不是 ANSI 字符丌Ӏ我们只需要把字符串作?#8220;抽象的符L?#8221;来看待。因此不存在字符串的内码的问题?/p>

OO 2007-04-03 10:25 发表评论
]]>使java服务器端支持断点l传http://www.tkk7.com/123xxx/articles/108116.htmlOOOOTue, 03 Apr 2007 01:04:00 GMThttp://www.tkk7.com/123xxx/articles/108116.htmlhttp://www.tkk7.com/123xxx/comments/108116.htmlhttp://www.tkk7.com/123xxx/articles/108116.html#Feedback2http://www.tkk7.com/123xxx/comments/commentRss/108116.htmlhttp://www.tkk7.com/123xxx/services/trackbacks/108116.html1     /**
 2      * 重新讄http response参数Q之支持断点箋?
 3      * 
 4      * @param fileLength
 5      *            文g长度.
 6      * @throws IOException
 7      * 
 8      */
 9     private void resetResponse(long fileLength) throws IOException {
10         long p = 0;
11         long l = fileLength;
12 
13         ServletActionContext.getResponse().reset();
14         // 告诉客户端允许断点箋传多U程q接下蝲
15         // 响应的格式是:
16         // Accept-Ranges: bytes
17 
18         ServletActionContext.getResponse().setHeader("Accept-Ranges""bytes");
19         // 如果是第一ơ下,q没有断点箋?状态是默认?nbsp;200,无需昑ּ讄
20         // 响应的格式是:
21         // HTTP/1.1 200 OK
22 
23         if (ServletActionContext.getRequest().getHeader("Range"!= null// 客户端请求的下蝲的文件块的开始字?/span>
24         {
25 
26             ServletActionContext.getResponse().setStatus(
27                     javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);
28             p = Long.parseLong(ServletActionContext.getRequest().getHeader(
29                     "Range").replaceAll("bytes=""").replaceAll("-"""));
30         }
31 
32         //如果设设|了Content-LengthQ则客户端会自动q行多线E下载。如果不希望支持多线E,则不要设|这个参数?/span>
33         // 响应的格式是:
34         // Content-Length: [文g的d] - [客户端请求的下蝲的文件块的开始字节]
35         // ServletActionContext.getResponse().setHeader("Content-Length",
36         // new Long(file.length() - p).toString());
37 
38         if (p != 0) {
39 
40             // 不是从最开始下?
41             // 响应的格式是:
42             // Content-Range: bytes [文g块的开始字节]-[文g的d?nbsp;- 1]/[文g的d]
43             String contentRange = new StringBuffer("bytes ")
44                                         .append(new Long(p).toString())
45                                         .append("-")
46                                         .append(new Long(l - 1).toString())
47                                         .append("/")
48                                         .append(new Long(l).toString())
49                                         .toString();
50             ServletActionContext.getResponse().setHeader("Content-Range",
51                     contentRange);
52             LogService.info("Content-Range is : " + contentRange);
53         }
54 
55         _fileStream.skip(p);
56 
57     }
正如代码所C,实现断点l传和多U程下蝲的关键在于对response的参数进行设|?/div>



OO 2007-04-03 09:04 发表评论
]]>
为javascript增加importҎ(gu)Q用来导入需要的js文g.http://www.tkk7.com/123xxx/articles/88578.htmlOOOOMon, 18 Dec 2006 08:45:00 GMThttp://www.tkk7.com/123xxx/articles/88578.htmlhttp://www.tkk7.com/123xxx/comments/88578.htmlhttp://www.tkk7.com/123xxx/articles/88578.html#Feedback0http://www.tkk7.com/123xxx/comments/commentRss/88578.htmlhttp://www.tkk7.com/123xxx/services/trackbacks/88578.html为javascript增加importҎ(gu)Q用于引入需要的js文g。通过增加element的方法进行添加的Ҏ(gu)是从|上得来的。我原来作为参Cq来的typeҎ(gu)了根据文件名后缀来判断,看v来更加直观一些?br>
 1/*--------------------------------------------------------------------------+
 2   | JSLoad (url           // String  - Scripts location (i.e. http:///a.js)
 3   |         [, container] // Object  - Window with script loading capability
 4   |         [, type]      // String  - Type of script (i.e. text/javascript)
 5   |         [, defer]     // Boolean - Flag for delaying script processing
 6   |         [, language]  // String  - Language script is written in.
 7   |         [, title])    // String  - Title for loaded script
 8   |+--------------------------------------------------------------------------+
 9   | Loads external JavaScripts; used by Import.
10   *--------------------------------------------------------------------------*/

11   function JSLoad(url, container, type, defer, language, title)
12   {
13      // verify / attain container
14      if(container == undefined || container == null) container = this;
15
16      // setup container
17      if(typeof container.write == "undefined")
18         if(typeof container.document != "undefined")
19            container = container.document;
20         else throw "Invalid container. Unable to load [" + url + "]";
21
22      // no type set
23      if(type == undefined || type == null)
24      {
25         type = '';
26
27         // no language so set default type
28         if(language == undefined || language == null)
29         {
30            language = undefined;
31            type = "text/javascript";
32         }

33      }

34
35      // set default language
36      if(language == undefined || language == null) language = "JavaScript";
37
38      // set title
39      if(title == undefined || title == null) title = '';
40
41      // set defer
42      if(defer == undefined) defer = false;
43
44      // build the script object
45      var script = container.createElement("script");
46      script.defer = defer;
47      script.language = language;
48      script.title = title;
49      script.type = type;
50      script.src = url;
51
52      // dynamically load the script via it's container
53      var head = container.getElementsByTagName("head")[0];
54      head.appendChild(script);
55   }

使用Ҏ(gu)Q?import("test.js");


OO 2006-12-18 16:45 发表评论
]]>
javascript Element拖拽功能http://www.tkk7.com/123xxx/articles/87313.htmlOOOOTue, 12 Dec 2006 09:34:00 GMThttp://www.tkk7.com/123xxx/articles/87313.htmlhttp://www.tkk7.com/123xxx/comments/87313.htmlhttp://www.tkk7.com/123xxx/articles/87313.html#Feedback1http://www.tkk7.com/123xxx/comments/commentRss/87313.htmlhttp://www.tkk7.com/123xxx/services/trackbacks/87313.html在页面中包含如下代码之后Q?span style="COLOR: rgb(0,0,0)">makeDraggable(item)来ə面元素可以拖拽

 1    
 2document.onmousemove = mouseMove;
 3document.onmouseup   = mouseUp;
 4
 5var dragObject  = null;
 6var mouseOffset = null;
 7var maxTop = null;
 8var maxWidth = null;
 9
10function getMouseOffset(target, event){
11    event = event || window.event;
12
13    var docPos    = getPosition(target);
14    var mousePos  = mouseCoords(event);
15    return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
16}

17
18function getPosition(e){
19    var left = 0;
20    var top  = 0;
21
22    while (e.offsetParent){
23        left += e.offsetLeft;
24        top  += e.offsetTop;
25        e     = e.offsetParent;
26    }

27
28    left += e.offsetLeft;
29    top  += e.offsetTop;
30
31    return {x:left, y:top};
32}

33
34function mouseMove(event){
35    event           = event || window.event;
36    var mousePos = mouseCoords(event);
37
38    if(dragObject){
39        dragObject.style.position = 'absolute';
40        var tmpTop = mousePos.y - mouseOffset.y;
41        if(tmpTop<10){
42            tmpTop = 10;
43        }

44        if(tmpTop>maxTop){
45            tmpTop = maxTop;
46        }

47        var tmpLeft = mousePos.x - mouseOffset.x;
48        if(tmpLeft<10){
49            tmpLeft = 10;
50        }

51        if(tmpLeft>maxWidth){
52            tmpLeft = maxWidth;
53        }

54        dragObject.style.top = tmpTop + "px";
55        dragObject.style.left = tmpLeft + "px";
56        return false;
57    }

58}

59function mouseUp(){
60    dragObject = null;
61}

62
63function mouseCoords(event){
64    if(event.pageX || event.pageY){
65        return {x:event.pageX, y:event.pageY};
66    }

67    return {
68        x:event.clientX + document.body.scrollLeft - document.body.clientLeft,
69        y:event.clientY + document.body.scrollTop  - document.body.clientTop
70    }
;
71}

72
73function makeDraggable(item){
74    if(!item) return;
75    item.onmousedown = function(event){
76        dragObject  = this.parentNode;
77        mouseOffset = getMouseOffset(this, event);
78        if(window.innerHeight>document.body.clientHeight){
79            maxTop = window.innerHeight-dragObject.offsetHeight-50;
80        }
else{
81            maxTop = document.body.clientHeight-dragObject.offsetHeight-10;
82        }

83        maxWidth = document.body.clientWidth-dragObject.offsetWidth-10;
84        return true;
85    }

86}


OO 2006-12-12 17:34 发表评论
]]>
常用javascript正则表达?/title><link>http://www.tkk7.com/123xxx/articles/80903.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Mon, 13 Nov 2006 07:34:00 GMT</pubDate><guid>http://www.tkk7.com/123xxx/articles/80903.html</guid><wfw:comment>http://www.tkk7.com/123xxx/comments/80903.html</wfw:comment><comments>http://www.tkk7.com/123xxx/articles/80903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/123xxx/comments/commentRss/80903.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/123xxx/services/trackbacks/80903.html</trackback:ping><description><![CDATA[ <div dragover="true" class="storytext"> <p dragover="true"> <span id="sxvwulc" class="javascript" id="text5738509" style="font-size: 12px;" twffan="done"> <font face="Verdana" size="2"> <a dragover="true" >http://www.itpub.net/showthread.php?s=&postid=5738725#post5738725</a> </font> </span> </p> <p> <span id="ptvenmh" class="javascript" style="font-size: 12px;" twffan="done"> <font face="Verdana" size="2">下面都是我收集的一些比较常用的正则表达式,因ؓq_可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同用。呵c?br /><br />匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]<br />评注Q匹配中文还真是个头疼的事,有了q个表达式就好办?br /><br />匚w双字节字W?包括汉字在内)Q[^x00-xff]<br />评注Q可以用来计字W串的长度(一个双字节字符长度?QASCII字符?Q?br /><br />匚wI白行的正则表达式:ns*r<br />评注Q可以用来删除空白行<br /><br />匚wHTML标记的正则表辑ּQ?lt;(S*?)[^>]*>.*?|<.*? /><br />评注Q网上流传的版本太糟p,上面q个也仅仅能匚w部分Q对于复杂的嵌套标记依旧无能为力<br /><br />匚w首尾I白字符的正则表辑ּQ^s*|s*$<br />评注Q可以用来删除行首行I白字符(包括I格、制表符、换늬{等)Q非常有用的表达?br /><br />匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />评注Q表单验证时很实?br /><br />匚w|址URL的正则表辑ּQ[a-zA-z]+://[^s]*<br />评注Q网上流传的版本功能很有限,上面q个基本可以满需?br /><br />匚w帐号是否合法(字母开_允许5-16字节Q允许字母数字下划线)Q^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />评注Q表单验证时很实?br /><br />匚w国内?sh)话LQd{3}-d{8}|d{4}-d{7}<br />评注Q匹配Ş式如 0511-4405222 ?021-87888822<br /><br />匚w腾讯QQP[1-9][0-9]{4,}<br />评注Q腾讯QQ号从10000开?br /><br />匚w中国邮政~码Q[1-9]d{5}(?!d)<br />评注Q中国邮政编码ؓ6位数?br /><br />匚ww䆾证:d{15}|d{18}<br />评注Q中国的w䆾证ؓ15位或18?br /><br />匚wip地址Qd+.d+.d+.d+<br />评注Q提取ip地址时有?/font> </span> </p> <br /> <span id="htnwuag" class="javascript" id="text5738509" style="font-size: 12px;" twffan="done"> <font face="Verdana" size="2"> <br />匚w特定数字Q?br />^[1-9]d*$    //匚w正整?br />^-[1-9]d*$   //匚w负整?br />^-?[1-9]d*$   //匚w整数<br />^[1-9]d*|0$  //匚w非负整数Q正整数 + 0Q?br />^-[1-9]d*|0$   //匚w非正整数Q负整数 + 0Q?br />^[1-9]d*.d*|0.d*[1-9]d*$   //匚w正QҎ(gu)<br />^-([1-9]d*.d*|0.d*[1-9]d*)$  //匚w负QҎ(gu)<br />^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匚w点?br />^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匚w非负点敎ͼ正QҎ(gu) + 0Q?br />^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匚w非正点敎ͼ负QҎ(gu) + 0Q?br />评注Q处理大量数据时有用Q具体应用时注意修正<br /><br />匚w特定字符Ԍ<br />^[A-Za-z]+$  //匚w?6个英文字母组成的字符?br />^[A-Z]+$  //匚w?6个英文字母的大写l成的字W串<br />^[a-z]+$  //匚w?6个英文字母的写l成的字W串<br />^[A-Za-z0-9]+$  //匚w由数字和26个英文字母组成的字符?br />^w+$  //匚w由数字?6个英文字母或者下划线l成的字W串<br /><br /><br />在用RegularExpressionValidator验证控g时的验证功能及其验证表达式介l如?<br /><br /><br />只能输入数字Q“^[0-9]*$?br />只能输入n位的数字Q“^d{n}$?br />只能输入臛_n位数字:“^d{n,}$?br />只能输入m-n位的数字Q“^d{m,n}$?br />只能输入零和非零开头的数字Q“^(0|[1-9][0-9]*)$?br />只能输入有两位小数的正实敎ͼ“^[0-9]+(.[0-9]{2})?$?br />只能输入?-3位小数的正实敎ͼ“^[0-9]+(.[0-9]{1,3})?$?br />只能输入非零的正整数Q“^+?[1-9][0-9]*$?br />只能输入非零的负整数Q“^-[1-9][0-9]*$?br />只能输入长度?的字W:“^.{3}$?br />只能输入?6个英文字母组成的字符Ԍ“^[A-Za-z]+$?br />只能输入?6个大写英文字母组成的字符Ԍ“^[A-Z]+$?br />只能输入?6个小写英文字母组成的字符Ԍ“^[a-z]+$?br />只能输入由数字和26个英文字母组成的字符Ԍ“^[A-Za-z0-9]+$?br />只能输入由数字?6个英文字母或者下划线l成的字W串Q“^w+$?br />验证用户密码:“^[a-zA-Z]w{5,17}$”正格式ؓQ以字母开_长度?-18之间Q?br /><br /><br />只能包含字符、数字和下划Uѝ?br />验证是否含有^%&',;=?$"{字W:“[^%&',;=?$x22]+?br />只能输入汉字Q“^[u4e00-u9fa5],{0,}$?br />验证Email地址Q“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$?br />验证InternetURLQ“^</font> <a href="http:///" target="_blank"> <font face="Verdana" size="2">http://</font> </a> <font face="Verdana" size="2">([w-]+.)+[w-]+(/[w-./?%&=]*)?$?br />验证?sh)话LQ“^((d{3,4})|d{3,4}-)?d{7,8}$?br /><br /><br />正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,<br /><br /><br />“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”?br />验证w䆾证号Q?5位或18位数字)Q“^d{15}|d{}18$?br />验证一q的12个月Q“^(0?[1-9]|1[0-2])$”正格式ؓQ?1??9”和?”?2?br />验证一个月?1天:“^((0?[1-9])|((1|2)[0-9])|30|31)$?br /><br /><br />正确格式为:?1”?9”和?”?1”?br /><br /><br />匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]<br />匚w双字节字W?包括汉字在内)Q[^x00-xff]<br />匚wI的正则表辑ּQn[s| ]*r<br />匚wHTML标记的正则表辑ּQ?<(.*)>.*</1>|<(.*) />/ <br />匚w首尾I格的正则表辑ּQ?^s*)|(s*$)<br />匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />匚w|址URL的正则表辑ּQ?/font> <a href="http:///" target="_blank"> <font face="Verdana" size="2">http://</font> </a> <font face="Verdana" size="2">([w-]+.)+[w-]+(/[w- ./?%&=]*)?<br /><br />(1)应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?<br />String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}<br /><br />(2)应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现<br />String.prototype.trim = function()<br />{<br />return this.replace(/(^s*)|(s*$)/g, "");<br />}<br />(3)应用Q利用正则表辑ּ分解和{换IP地址<br />function IP2V(ip) //IP地址转换成对应数?br />{<br />re=/(d+).(d+).(d+).(d+)/g //匚wIP地址的正则表辑ּ<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error("Not a valid IP address!")<br />}<br />}<br />(4)应用Q从URL地址中提取文件名的javascriptE序<br />s="http://www.9499.net/page1.htm";<br />s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm<br />(5)应用Q利用正则表辑ּ限制|页表单里的文本框输入内?br />? 正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"<br />? 正则表达式限制只能输入全角字W: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"<br />? 正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"<br />? 正则表达式限制只能输入数字和英文Qonkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''</font> </span> </div> <img src ="http://www.tkk7.com/123xxx/aggbug/80903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/123xxx/" target="_blank">OO</a> 2006-11-13 15:34 <a href="http://www.tkk7.com/123xxx/articles/80903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webE序中用javascriptq行数据校验http://www.tkk7.com/123xxx/articles/45498.htmlOOOOWed, 10 May 2006 08:50:00 GMThttp://www.tkk7.com/123xxx/articles/45498.htmlhttp://www.tkk7.com/123xxx/comments/45498.htmlhttp://www.tkk7.com/123xxx/articles/45498.html#Feedback0http://www.tkk7.com/123xxx/comments/commentRss/45498.htmlhttp://www.tkk7.com/123xxx/services/trackbacks/45498.html  1 <!--  2     /**********************************************************  3      * validato...  阅读全文

OO 2006-05-10 16:50 发表评论
]]>
从一个小例子看正则表辑ּ的执行步?/title><link>http://www.tkk7.com/123xxx/articles/29910.html</link><dc:creator>OO</dc:creator><author>OO</author><pubDate>Wed, 08 Feb 2006 04:04:00 GMT</pubDate><guid>http://www.tkk7.com/123xxx/articles/29910.html</guid><wfw:comment>http://www.tkk7.com/123xxx/comments/29910.html</wfw:comment><comments>http://www.tkk7.com/123xxx/articles/29910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/123xxx/comments/commentRss/29910.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/123xxx/services/trackbacks/29910.html</trackback:ping><description><![CDATA[<br> <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 128, 128);">1</span> <span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);">script language</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">2</span> <span style="color: rgb(0, 0, 0);">function format(){<br></span><span style="color: rgb(0, 128, 128);">3</span> <span style="color: rgb(0, 0, 0);">    var r </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">\S[</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">\r\n]</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">\S</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">4</span> <span style="color: rgb(0, 0, 0);">    var name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\r\n              username__  nn \r\n               </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">5</span> <span style="color: rgb(0, 0, 0);">    var rName</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">name.match(r);<br></span><span style="color: rgb(0, 128, 128);">6</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> rName;<br></span><span style="color: rgb(0, 128, 128);">7</span> <span style="color: rgb(0, 0, 0);">}<br></span><span style="color: rgb(0, 128, 128);">8</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);"></</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">><br> </span></span></div><br>    q两天被正则表达式搞得云里雾里的。很快就得出了自己想要的l果Q但是却q自己都不知道自q正则表达式应该怎么解释。以前虽然也用过正则表达式写一些东 西,但是却没仔细理解q它的执行步骤。借此ZҎ(gu)则表辑ּq行了一下学习,才发现原来知道了正则表达式的执行步骤之后Q要对它q行解释也是很容易的?br>     以上面的代码ZQ目标是要取出?span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__  nn</span></span>”这个字W串?br>     我原来的错误理解是这LQ一开始就拿整个正则表辑ּ?span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">\S[</span><span style="color: rgb(0, 0, 0);">^</span><span style="color: rgb(0, 0, 0);">\r\n]</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">\S</span><span style="color: rgb(0, 0, 0);"></span></span>”去对name字符串从左到双行匹配,那么以“非I字W?\S)”开_以“非I字W?\S)”结,中间是非"\r\n"的字W串Q第一个匹配的l果应该是?span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__</span></span>”啊Q怎么会是?span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__  nn</span></span>”呢Q后来google了一些资料看了之后才明白Q是我把执行的步骤搞错的?br>     正确的解释应该是q样的:首先用正则表辑ּ的第一个匹配符“\S”去对nameq行匚w,得到l果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__  nn \r\n               </span><span style="color: rgb(0, 0, 0);"></span></span>"Q然后用"[^\r\n]*"?<font color="#ff0000">s</font>"开始进行匹配,得到l果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__  nnI格</font></span></span>"Q由于最后用"\S"对前面得出的l果"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__  nnI格</font></span></span>"q行匚wQ由于[^\r\n]<font color="#ff0000">*</font>中的<font color="#ff0000">*</font>的存在,所以匹?\S[^\r\n]*"的其实是一l结?-?<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">s</font></span></span>"一直到"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__  nnI格</font></span></span>"Q而最后那?\S"则是对一l结果都q行匚wQ匹配后也会得到一l结?-?<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">s</font></span></span>"一直到"<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__</font></span></span>",再加?<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__  n</font></span></span>"?<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">u<font color="#ff0000">sername__  nn</font></span></span>"Q,q回最大匹配结果,得到正确的结?<span id="Code_Open_Text" style="display: inline;"><span style="color: rgb(0, 0, 0);">username__  nn</span></span>"?br>     写得好像有点乱,要是看完理解不了的话Q按照上面说的可能结果对原始字符串nameq行一下修改,做一下测试就会明白了?br> <img src ="http://www.tkk7.com/123xxx/aggbug/29910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/123xxx/" target="_blank">OO</a> 2006-02-08 12:04 <a href="http://www.tkk7.com/123xxx/articles/29910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://doubaye.com" target="_blank">Ʒһ</a>| <a href="http://carsmp.com" target="_blank">һƷһaһ</a>| <a href="http://rhacu.com" target="_blank">ٸѾƷ</a>| <a href="http://kencery.com" target="_blank">Ʒ޾Ʒۿ</a>| <a href="http://zzttt04.com" target="_blank">뾫Ʒ</a>| <a href="http://733807.com" target="_blank">Ůڵվ</a>| <a href="http://4eeyy.com" target="_blank">**һëƬ</a>| <a href="http://chiguigu.com" target="_blank">йͽxxxxxѿ</a>| <a href="http://lwjiheng.com" target="_blank">91˾Ʒ޾Ʒ</a>| <a href="http://chinacmk.com" target="_blank">Ļ߿˶Ƭ </a>| <a href="http://8mav938.com" target="_blank">ƬAëƬ鴤</a>| <a href="http://2023852.com" target="_blank">޾Ʒѹۿ</a>| <a href="http://miya77772.com" target="_blank">޹av</a>| <a href="http://0755szyxcm.com" target="_blank">þþ޾ƷƵ</a>| <a href="http://cjfuli.com" target="_blank">AVҹ丣㽶149</a>| <a href="http://boyonet.com" target="_blank">tsƵ</a>| <a href="http://yuase.com" target="_blank">Ů˱ŮˬƵ</a>| <a href="http://www-7607.com" target="_blank">7m͹Ʒȫ</a>| <a href="http://www-135888.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://fns92.com" target="_blank">պAVһl</a>| <a href="http://www8x5188x.com" target="_blank">޾ƷþþþAVƬ</a>| <a href="http://cijishiye.com" target="_blank">þþƷ5555</a>| <a href="http://f2dai.com" target="_blank">91㽶߹ۿȫ</a>| <a href="http://41xjj.com" target="_blank">ʮ˽߹ۿƵ</a>| <a href="http://qzapp88.com" target="_blank">Ļ߾Ʒһ</a>| <a href="http://eoeoyui.com" target="_blank">ɫ͵͵޵һۺ</a>| <a href="http://liulian88.com" target="_blank">޹ۺϾƷ</a>| <a href="http://ymtphoto.com" target="_blank">ŷ޾Ʒ˾þԻ</a>| <a href="http://www137av.com" target="_blank">ɫžžþWWWۺ</a>| <a href="http://qestest.com" target="_blank">˳˳ۺþ</a>| <a href="http://zzdyzj.com" target="_blank">ҹƷ޿</a>| <a href="http://wx-jn.com" target="_blank">һëƬƵ</a>| <a href="http://yidazn.com" target="_blank">ҹһ</a>| <a href="http://carsmp.com" target="_blank">Ļ뾫ƷԴþ</a>| <a href="http://qiseka.com" target="_blank">ŵ</a>| <a href="http://o091i.com" target="_blank">ۺɫɫ</a>| <a href="http://952268.com" target="_blank">޳˼С˵</a>| <a href="http://440878.com" target="_blank">AVһδ</a>| <a href="http://caoliusq1024.com" target="_blank">þþƷƷް</a>| <a href="http://800141.com" target="_blank">޳վ</a>| <a href="http://www-3499.com" target="_blank">Ƭ߹ۿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>