[AS3]有关AS3跨域读取图片报错“checkPolicyFile”的解决方法

这几天有一个项目里用到Loader调用外部图片文件,总是报“...沙箱...checkPolicyFile”错误信息,但我在图片服务器上已经设置了crossdomain.xml文件了,让我头痛很久!今天终于找到解决办法了!
Flash Player 9在安全策略问题比以前更麻烦了!下面就是解决方法!
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.LoaderContext;

var lc:LoaderContext = new LoaderContext(true);
var loader:Loader = new Loader();
loader.load(new URLRequest("http://xxxxxxxx/xxxx.jpg"),lc);


//需要在原来的调用基础增加LoaderContext类;

1. ASCII码
    目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

 
我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。
ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
         注重:在计算机的存储单元 中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方 法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中 1的个数必须是偶数,若非偶数,则在最高位b7添1。
 
2、非ASCII编码
英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码 体系,可以表示最多256个符号。
但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了 é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。
至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。
3、Unicode的问题
正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件经常出现乱码?就是因为发信人和收信人使用的编码方式不一样。
可以想象,假如有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。
Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。
需要注重的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。
这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个 问题是,我们已经知道,英文字母只用一个字节表示就够了,假如unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三 个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。
它们造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。
4、UTF-8
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。反复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx                     (说明一下字母占一个字节)
0000 0000-0080 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx    (说明一下汉字占两个字节)
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
下面,还是以汉字“严”为例,演示如何实现UTF-8编码。
已 知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是 “11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
5、 Unicode与UTF-8之间的转换
通过上一节的例子,可以看到“严”的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。
在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。
里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。
1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,假如是繁体中文版会采用Big5码)。
2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。
3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。
4)UTF-8编码,也就是上一节谈到的编码方法。
选择完”编码方式“后,点击”保存“按钮,文件的编码方式就连忙转换好了。
6、 Little endian和Big endian
上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字”严“为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E, 另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。
这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big- Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。
因此,第一个字节在前,就是”大头方式“(Big endian),第二个字节在前就是”小头方式“(Little endian)。
那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
假如一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;假如头两个字节是FF FE,就表示该文件采用小头方式。
7、ASCII,UNICODE,UTF-8实例
下面,举一个实例。
打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。
8、GB2312,Big5,GBK,GB18030
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
从 ASCII、GB2312到GBK,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英 文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK都属于双字节字符集 (DBCS)。
2000年 的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇 上说,GB18030在GB13000.1的20902个汉字的基础上增加了CJK扩展A的6582个汉字(Unicode码 0x3400-0x4db5),一共收录了27484个汉字。
CJK就是中日韩的意思。Unicode为了节省码位,将中日韩三国语言中的文字统一编码。GB13000.1就是ISO/IEC 10646-1的中文版,相当于Unicode 1.1。
GB18030的 编码采用单字节、双字节和4字节方案。其中单字节、双字节和GBK是完全兼容的。4字节编码的码位就是收录了CJK扩展A的6582个汉字。例如:UCS 的0x3400在GB18030中的编码应该是8139EF30,UCS的0x3401在GB18030中的编码应该是8139EF31。
微软提供了GB18030的升级包,但这个升级包只是提供了一套支持CJK扩展A的6582个汉字的新字体:新宋体-18030,并不改变内码。Windows 的内码仍然是GBK。
也就是说Big5支持繁体中文,GB2312支持简体中文,Big5,GB2312是GBK的子集,GBK是GB18030的子集
 
9、使用UTF-8与GBK的选择
GBK是中国国家编码,通用性比UTF8差,不过UTF8占用的空间比GBK大.
UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,而且中文可以直接识别,假如你的论坛要做的比较国际化那就必须用UTF8的。

#1 - 复制或删除一行代码时,没必要先选择它。

如果你想复制一行代码,你只需要简单的按CTRL+c拷贝,然后按CTRL+v粘贴这行就可以了,而不需要选择整行的代码。如果你想删除一行代码,只需按CTRL+x就可以了。CTRL+x与Delete相比,其优势在于给我们提供了一次后悔的机会。

#2 - 使用CTRL+.(CTRL+小数点)来自动添加命名空间

在 Visual Studio 2008 代码编辑中,你敲入一个类的名字,但是该类的命名空间在当前文件中没有被导入,那么 Visual Studio 会在这个名字下面显示一个小红条(见图1)。此时你可以使用CTRL+.或者使用Shift+Alt+F10来显示一个对话框导入正确的命名空间(见图 2)。

1(图1)

2(图2)

#3 - 永远不要手工创建properties

如(图3)的property,不需要手工一个字一个字的敲入,只需 prop+TAB+TAB (敲入prop,然后按两次TAB键)。然后按TAB键在参数之间切换,按回车键完成property的创建。

3 (图3)

#4 - 删除多余的using指令,并且排序

当 我们新一个类的时候,Visual Studio 会将常用的命名空间using在类的头部。但是在我们写完一个类的时候,有些using是多余的,删除多余的using,再排一下序,可以使代码看起来更 清晰。Visual Studio 2008 已经为我们做好了这一切。在代码编辑区点击右键,可以看到“组织 using”菜单,这就是我们需要的了。

4 (见图4)

#5 - 使用CTRL+k+c注释代码

如果你想临时想禁用一段代码,你可以把这段代码注释掉,方法是:先选择这段代码,然后CTRL+k+c(按住CTRL键不放,然后,按一下k键,再按一下c键),见(图5)(图6)。使用CTRL+k+u可以取消注释。

5 (图5)

6 (图6)

#6 - 你可以关掉所有文档窗口,除了当前这个。

我们经常会在Visual Studio中打开多个文档窗口,这时可以使用CTRL+TAB组合键方便的在不同的窗口之间切换。然而如果我们打开了太多的窗口,使用CTRL+TAB就会变的很困难。

这时有两个方法可以关掉打开的文档窗口。一个是通过“窗口”菜单的“关闭所有文档”。另一个更好的方法是,在当前文档窗口的标签上点击右键,然后选择“除此之外全部关闭”(见图7)。

7 (图7)

#7 - 在App_Data目录中双击数据库文件打开数据库

其实这个算不上是技巧了,很多朋友都有意或无意的这样用着。

#8 - 通过拖拽复制文件或目录到我们项目中

有时候我们会在新的解决方案中使用到以前的项目,原来我们的方法是,在解决方案上点右击,然后选择“添加”->“现有项目”,但是这种方法太慢了。有没有更快捷的方法呢?答案是肯定的,直接将文件或目录拖拽到“解决方案资源管理器”,OK,就么简单。

#9 - 使用CTRL+空格进行自动完成

这个方法对老外来说太体贴了,但是我们国内的朋友一般使用CTRL+空格来进行输入法的开/关。这里就不细说了。

#10 - 使用CTRL+n或CTRL+SHIFT+a创建新项

在 执行一个操作的时候,一般来说,使用鼠标是会比使用快捷键要慢一些的。比如在项目中添加新项,可以使用CTRL+n或是CTRL+SHIFT+a,前一个 用于ASP.NET Web站点,后一个用于ASP.NET MVC Web Application。从CTRL+n或CTRL+SHIFT+a开始养成使用快捷键的习惯吧!

#11 - 在新建文件时,不需要填写文件扩展名。

接着上一个技巧,通过快捷键添加新项时,会打开一个对话框(见图8)。可以通过使用TAB键和方向键来导航焦点,当焦点切换到“name”时,你填写的新项名字可以不包含文件扩展名。因为Visual Studio将根据我们选择的模板为我们加上扩展名。

 
如果想让自己的应用程序在2003服务器登录前运行,除了写底层的vxd驱动外,似乎只能做成系统服务。而默认安装好的Windows 2003又没有提供制作成系统工具的服务器。如果强行修改注册表加入,很有可能启动失败。怎么办,当然是Google一下。
原来微软提供了一个名为Windows 2003 Resource Kits的包,里面有各式各样奇奇怪怪的小工具,其中有两个就是用来将普通程序变成系统服务器的。一个称为instsrv.exe,另一个唤作srvany.exe。
下面开工,先装好资源包。假设我们的程序名为chatServer.exe,我需要它成为系统服务器,在系统启动但是未登录的情况下运行……
控制台下键入命令
1
instsrv chatServer d:\chat\chatServer.exe
将其注册为系统服务,进入管理工具的服务中查看,多了一项chatServer。尝试启动,如果你能正常启动它,OK。如果启动失败,则表明我们的程序不太适应系统服务这种东西。没关系,微软提供了一个srvany.exe的东东,从名字就看得出来,它可以将任何程序变成系统服务。
1.进入注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\chatServer,把ImagePath的内容改为指向srvany.exe,如“d:\tools\srvany.exe”
2.新建Parameters项目,添加application子键,内容为应用程序的路径,如:d:\chat\chatServer.exe
3.回到进入管理工具的服务中,启动chatServer, All done。
4.别忘了将该服务器改为自启动。
如果你仍然搞不定的话,推荐一个专干这个事情的软件Firedaemon.com,咱也是失败了很多次,后来用这个软件搞定的,囧。不过公司的服务器都是Linux和FreeBSD了,哪天有钱买服务器后CoCo也把自己的服务器搞成Linux,windows的服务器实在是太不好用了……
 
下载上面的工具包安装后,再在 Command Shell窗口执行上述命令即可。
 
小知识 什么是服务
  服务是一种应用程序类型,它在后台运行。要管理系统服务,请运行services.msc,打开“服务”对话窗口,这里可以看到当前系统中的所有服务。双击某一服务,在弹出的“属性”对话框的“常规”选项页中的“服务状态”栏可以看到此服务当前状态。单击“启动类型”下拉菜单,可以将该服务设置为自动启动、手动启动或禁用。
    用instsrv.exe程序设置成服务启动
  Windows的“服务”工具是不能添加/删除服务的,但可以利用Windows提供的资源工具包中的Instsrv.exe和Srvany.exe来实现。其中,Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。
  ★设置方法
  第一步:报户口——注册服务名称
  这里就以建立一个名为explorer的服务为例来说明,首先将Instsrv.exe和Srvany.exe存放到一个比较方便的地方,建议放到系统安装目录中(笔者的Windows XP安装目录为D:\Windows)。运行cmd.exe,进入“命令提示符”窗口,执行命令:cd d:\Windows,进入系统安装目录。运行命令:
  Instsrv explorer d:\Windows\srvany.exe
  好了,这条命令的成功运行,已经在系统中注册了一个名叫explorer的服务,快到“服务”中看看一下检验检验吧!
  小提示
  ★注册服务:instsrv :这里的可任意取名,前面必须带上该文件的绝对路径,如:D:\Windows\srvany.exe。
  ★删除服务:instsrv remove
  第二步:找关联
  要让explorer服务正常运行,还必须在注册表中指定该服务对应的应用程序。运行Regedit.exe,打开“注册表编辑器”,依次展开如下子键:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services],在该子键下找到并右击explorer(对应前面建立的服务名),选择“新建”下的“项”,将其命名为Parameters。单击选定它,在右侧窗口中新建一个名为Application的字符串值,将其数值数据设置为explorer服务对应的应用程序绝对路径,比如:d:\Windows\gboor.exe。接着再新建两个字符串值:AppDirectory和AppParameters,AppDirectory指定程序所在的目录,AppParameters指明程序运行的参数(注意:可以不用设值),如图1所示,最后关闭注册表编辑器。
点击放大此图片
  接下来打开“服务”窗口,找到刚添加的explorer服务,打开其属性对话框,单击切换到“登录”选项页,在“登录身份”中选中“本地系统账户”,如图2,如果不想让服务在运行的时候弹出状态窗口,请不要勾选“允许服务与桌面交互”复选项,单击“确定”返回。至此,explorer服务已经全部配置好了。
  最后,右击该服务,选择“启动”,这样该程序就会启动,而且以后也会在系统启动时自动以服务形式运行!

W3C标准是什么,需注意哪些问题?

什么是W3C标准

  站点标准(Site Standard)不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构 (Structure)表现(Presentation)行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括 XHTML和XML;表现标准语言主要包括CSS;行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些 标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。下面我们来简单了解一下这些标准。

结构标准语言

1、XML
  XML是The Extensible Markup Language(可扩展标识语言)的简写。目前推荐遵循的是W3C于2000年10月 6日发布的XML1.0,参考W3C-XML。和HTML一样,XML同样来源于SGML,但XML是一种能定义其他语言的语言。 XML最初设计的目的是弥补HTML的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换 和描述。关于XML的好处和技术范细节这里就不多说了,网上有很多资料,也有很多书籍可以参考。
2、XHTML
  XHTML是The Extensible HyperText Markup Language(可扩展标识语言)的缩写。目前推荐遵循的是 W3C推荐XML1.0(参考http://www.w3.org/TR/xhtml1)。XML虽然数据转换能力强大,完全可以替代HTML,但面 对成千上万已有的站点,直接采用XML还为时过早。因此,我们在HTML4.0的基础上,用XML的规则对其进行扩 展,得到了XHTML。简单的说,建立XHTML的目的就是实现HTML向XML的过渡。

表现标准语言

  CSS是Cascading Style Sheets(层叠样式表)的缩写。目前推荐遵循的是W3C于1998年5月12日推荐CSS2 (参考http://www.w3.org/TR/CSS2/)。W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的 语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构,使站点的访问及维护更加容易。

行为标准

1、DOM
  DOM是Document Object Model(文档对象模型)的缩写。根据W3C DOM规范 (http://www.w3.org/DOM/),DOM是一种与浏览器、平台、语言的接口,使得你可以访问页面其他的标准组件。 简单理解,DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准 的方法,让他们来访问他们站点中的数据、脚本表现层对像。
2、ECMAScript
  ECMAScript是ECMA(European Computer Manufacturers Association)制定的标准脚本语言 (JavaScript)。目前推荐遵循的是ECMAScript 262(http://www.ecma.ch/ecma1/STAND/ECMA-262.htm)。

 

网站要通过W3C标准,需要注意以下几个问题:
1.XHTML 1.0文件类别宣告的正确写法 (不可小写) 
A:过度标准(Transitional)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
B:框架标准(Frameset)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
C:严格标准(Strict) 
包含以上须注意的问题,还有其他更严格的标准
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
2.头文件问题
所有的网页头文件都一律都改为W3C标准形式,写法如下:
<head> 
<meta http-equiv="content-type" content="text/html; charset=gb2312" /> 
<meta http-equiv="content-language" content="zh-cn" /> 
<meta name="keywords" content="..." /> 
<meta name="description" content="..."/> 
<title>...</title> 
</head> 
3.不允许使用target="_blank"
在HTML4.01可以使用target="_blank",但XHTML1.0是不被允许的.
比如原来这样写的代码:<a href="document.html" target="_blank"> 打开一个新窗口</a> 
现在需要写成这样:<a href="document.html" rel="external">打开一个新窗口</a> 
这是符合strict标准的方法。
当然还必须配合一个javascript才有效。javascript完整的代码JS如下:
/**
 * 打开新窗口链接
 **/
function externalLinks() {
    if (!document.getElementsByTagName) return;
    var anchors = document.getElementsByTagName("a");
    for (var i=0; i<anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.getAttribute("href") &&
        anchor.getAttribute("rel") == "external")
        anchor.target = "_blank";
    }
}
window.onload = externallinks; 
然后把它保存成一个.js文件(比如open.js),再通过外部联接方法调用:
<script type="text/javascript" src="external.js"></script>
4.XHTML 1.0要求所有的标识必须关闭
所有没有成对的空标识必须以 /> 结尾
<p></p>和<a href="index.html"></a>这就是成对 
错误 <br> <hr> 
正确 <br /> <hr /> 
错误 <input type="text" name="name"> 
正确 <input type="text" name="name" /> 
错误 <meta ...> 
正确 <meta ... /> 
错误 <link rel="stylesheet" type="text/css" href="style.css"> 
正确 <link rel="stylesheet" type="text/css" href="style.css" /> 
错误 <img src="bg.gif" border="0" alt="说明文字"> 
正确 <img src="bg.gif" border="0" alt="说明文字" /> 
5.所有标识元素名称都使用小写
错误 <HTML> <TITLE> <HEAD> <BODY> 
正确 <html> <title> <head> <body> 
错误 <IMG SRC="BG.GIF" BORDER="0" ALT="说明文字"> 
正确 <img src="bg.gif" border="0" alt="说明文字" /> 
错误 <UL><LI></LI></UL> 
正确 <ul><li></li></ul> 
以上只是举例,是"所有"标签元素名称都必须是小写 
6.同一个id选择器不可重复使用一个网页中id="xx"同一个选择器不能重复使用,若需要重复请用class="xx" 
7.W3C标准标识必须是成对的 
<p> </p> <span></span> <div></div> 
8.正确的标识顺序 
错误 <b><i>文字</b></i> 
正确 <b><i>文字</i></b> 
9.JS写法 
Javascript我们通常会写为 
错误 <script language="javascript"> 
W3C标准必须为程式指定类型type=text/javascript,所以要写为 
正确 <script type="text/javascript"> 
或者 <script language="javascript" type="text/javascript"> 
载入外部.js:
正确 <script type="text/javascript" src="script.js"></script> 
10.绝对不可省略双引号或单引号
错误 style=font-size:9pt 
正确 style="font-size:9pt" 
错误 <img src=bg.gif width=140 height=30 alt=text /> 
正确 <img src="bg.gif" width="140" height="30" alt="text" /> 
错误 <a href=home>text</a> 
正确 <a href="home">text</a> 
11.W3C标准规定图片标识加上文字说明alt="图片说明"
错误 <img src="bg.gif" height="50" border="0" /> 
正确 <img src="bg.gif" height="50" border="0" alt="说明文字" /> 
12.背景音乐不允许使用 bgsound 标签,不过我们依然可以用JavaScript来解决这个问题。js代码如下:
<!-- Begin 
var MSIE=navigator.userAgent.indexOf("MSIE"); 
var NETS=navigator.userAgent.indexOf("Netscape"); 
var OPER=navigator.userAgent.indexOf("Opera"); 
if((MSIE>-1) || (OPER>-1)) { 
document.write("<BGSOUND SRC=背景音乐地址 LOOP=INFINITE>"); 
} else { 
document.write("<EMBED SRC=背景音乐地址 AUTOSTART=TRUE "); 
document.write("HIDDEN=true VOLUME=100 LOOP=TRUE>"); 

// end -->然后保存成.js文件(比如background_music.js),通过外部联接方法调用它

13. <embed>标识的争议
<embed>是Netscape的私有标识,W3C标准从HTML3.2 HTML 4.01 到 XHTML 1.0 中都没有这个标识,所以使用<embed>的页面是不能通过标准测试。 
W3C标准推荐使用 <object> 标识,用<object>插入flash影片的代码可以写为: 
<object type="application/x-shockwave-flash" data="index.swf" width="400" height="200"> 
<param name="movie" value="index.swf" /> 
</object> 
但这样的写法可能IE5/IE6 Win浏览器版本会出现问题.
<embed>标识因为广大的受到运用,不再标准范围引起很大的争议,想要解决这个问题,只能等IE浏览器对<object>有更好的支持或者W3C愿意收录<embed>标识。
14. W3C标准规定不允许使用框架标签<IFRAME>
用JavaScript解决问题了。javascript完整的代码如下:
function ifr(url,w,h){document.write(’<iframe id="ifr" name="ifr" width="’+w+’" height="’+h+’" border="0" frameborder="0" scrolling="no" src="’+url+’"></iframe>’);} 然后把它保存成一个.js文件(比如iframe.js),然后通过外部联接方法调用:<script type="text/javascript" src="ifr.js"></script> 在你需要插入框架的地方写以下代码即可:<script type="text/javascript">ifr(’需插入的网页地址’,’567’,’485’);</script> 函数ifr()使用说明:ifr(’这里写地址’,’这里写宽度’,’这里写长度’,)
15.google广告问题
google广告的代码是不符合W3C标准的,只好又把它转成JS调用,但GOOGLE政策里是写着不允许修改代码的,
关于这点只能等待看看在以后会有什么修改了。JS文件(google.js)代码如下:document.writeln("<script type=\"text\/javascript\"><!--"); 
document.writeln("google_ad_client = \"pub-0538745384335317\";"); 
document.writeln("google_ad_width = 125;"); 
document.writeln("google_ad_height = 125;"); 
document.writeln("google_ad_format = \"125x125_as\";"); 
document.writeln("google_ad_type = \"text_image\";"); 
document.writeln("\/\/2007-06-29: http://www.100byte.com/"); 
document.writeln("google_ad_channel = \"4751988107\";"); 
document.writeln("google_color_border = \"1a1a1a\";"); 
document.writeln("google_color_bg = \"1a1a1a\";"); 
document.writeln("google_color_link = \"d0eb6a\";"); 
document.writeln("google_color_text = \"ffffff\";"); 
document.writeln("google_color_url = \"8ad459\";"); 
document.writeln("google_ui_features = \"rc:6\";"); 
document.writeln("\/\/-->"); 
document.writeln("<\/script>"); 
document.writeln("<script type=\"text\/javascript\""); 
document.writeln(" src=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">"); 
document.writeln("<\/script>") 
各位可以按照自己的情况修改,网上也有许多把HTML代码转为JS代码的地方。最后在需要挂广告的地方放入代码 <script type="text/javascript" src="google.js"></script> 
16.W3C标准注解文字不可包含--符号
错误 <!-- index--box -->
正确 <!-- indexbox -->
小贴士:在样式表的注释中注意尽量避免用中文
17.正确使用CSS样式表
样式表放在文件本身的时候,一定要放在<head></head>之间
<link rel="stylesheet" type="text/css" href="style.css" /> 
<style type="text/css"> 
<!-- 
body{font-size:9pt;} 
--> 
</style> 
注意:
错误 <style> 正确 <style type="text/css">
18.使用表格常犯的错误
在做表格通常会指定宽与高,例如:<table border="1" width="300" height="100"> 
<tr><td> 内容 </td></tr> 
</table> 这样做是没有办法通过,可使用CSS来控制标识元素的高度.table{ height:100px; }<table class="table"><tr><td> TEXT </td></tr> </table> 但若使用太多表格,在CSS一一指定不同高,也不是好方法其实很简单将高度height属性指定在储存格就可以了通过测试
<table border="0" width="300"> <tr><td height="100"> TEXT </td></tr> </table> 但这不是W3C标准,建议多使用div代替不必要的table
19.非标识一部分的符号以编码表示(窗体内包含以下符号也必须用编码表示)
< 以 &lt; 表示 
> 以 &gt; 表示 
& 以 &amp; 表示 
程序中的连结 & 也要改用 &amp; 
错误 <a href="foo.cgi?chapter=1&section=2"> 
正确 <a href="foo.cgi?chapter=1&amp;section=2"> 
20.所有属性都必须有值
XHTML1.0规定所有属性都必须有值, 若没有就必须重复属性作为值
错误 <input type="radio" value="v1" checked name="s1" /> 
正确 <input type="radio" value="v1" checked="checked" name="s1" /> 
错误 <option selected>S1</option> 
正确 <option selected="selected">S1</option> 
错误 <td nowrap> 
正确 <td nowrap="nowrap"> 

W3C标准测试网址 http://validator.w3.org/

W3C CSS 校验网址 http://jigsaw.w3.org/css-validator/

补充:
本人发现如果javascript通不过w3c时,可以加<!---->得以通过

<script type="text/javascript">
<!--

/* javascript code  */

 

-->
</script>