文章检索
-
三系统安装 二氧化碳排放量 互联网森林 凤凰 前田约翰 塑料瓶 姓 岳阳 开源 张家界 扫地机器人 无效字符 来历 氏 电话骗局 简单法则 自由行 致命 致癌 节能灯泡 设计方式 说法 长沙 马子 骗子 android C# CMake CMS Durpal ExtJS Godaddy Google Code Google Sync Joomla js页面 linux mac opensuse roomba twitter window wordpress XHTML XML
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
twitter
- @yegle 自己买个剪卡器吧,一次成功,嘿嘿
持续关注
Categories
广而告之
Category Archives: 我爱开源
又上了名字空间的套
在做一个XML的XSL,原XML如下: <?xml version="1.0" encoding="utf-16"?> <book version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns="http://docbook.org/ns/docbook"> <info> <title>test</title> <author> <personname> <othername>Unknown</othername> </personname> </author> <bibliosource>Unknown</bibliosource> </info> </book> 制作的XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="info"> <xsl:value-of … Continue reading
XHTML解析的实体问题
我在《集成Html Tidy》一文中说过使用HtmlTidy转换HTML以方便使用XML解析器解析,事实上,并没有那么简单,随便解析几个XHTML就会碰到解析异常的问题,错误是“Reference to undeclared entity ‘nbsp’”。 查找原因发现,在XML中,除了< > & ' "以外,其他如 之类的实体必须通过DTD或其他方式定义。Html Tidy转换出的XHTML并没有显式定义这些实体,而是采用类似以下的定义: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 在这个DTD中会定义如&nbps;之类的实体,但由于需要到W3C的网站上去获取这些定义,所以XML解析器默认会忽略这些定义,就导致没有定义的异常。 不过在.net中提供了XmlResolver类帮助处理这种情况,而我们需要做的就是重写这个类,并将XHTML中定义的DTD重新指向我们指定的某个位置,如上的情况操作如下: 1. 下载http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 2. 将下载的dtd作为资源放入程序中 3. 重写XmlResolver类,增加判断,当传入的路径为"-//W3C//DTD XHTML 1.0 Transitional//EN" 时就以流方式返回资源中的DTD 4. 创建XmlReader,并将重载的XmlResolver设置在XmlReader中 5. 使用该XmlReader装载解析XHTML 完成以上步骤,再解析XHTML就不会再有异常出现了。当然XHTML的DTD定义不止这一种,为了兼容起见,最好将所有的DTD定义都按以上的步骤加入程序中。 具体实现代码可以参考我的开源项目:Page Releaser
UrlRewritingNET实现URL Rewrite
在asp.net中实现URL Rewrite,除了IIS本身带的URL Rewrite Module以外,还有很到其他的解决方案,比如UrlRewritingNET。 UrlRewritingNET号称除了文件扩展名Rewrite需要IIS支持以外,其他所有操作都不需要IIS设置,这当然对虚拟主机的网站来说是非常便利的。 下面看看怎么来部署UrlRewritingNET: 1. 首先将下载的dll放置到bin目录 2. 修改Web.config,增加UrlRewritingNET的相关配置如下: <?xml version="1.0"?> <configuration> <configSections> <section name="urlrewritingnet" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/> </configSections> <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07"> <rewrites> <add name="category" … Continue reading
HTML页面之间的参数传递的局限性
动态网页传递参数比较简单,如果想在HTML之间传递参数就需要一点技巧,摘录两种方法如下: 采用字符串解析的: /* *函数功能:从href获得参数 *sHref: http://www.cscenter.com.cn/arg.htm?arg1=d&arg2=re *sArgName:arg1, arg2 *return: the value of arg. d, re */ function GetArgsFromHref(sArgName) { var sHref= document.location.href; var args = sHref.split("?"); var retval = ""; if(args[0] == sHref) /*参数为空*/ { … Continue reading
实现HTML的简单压缩
PageReleaser需要一种HTML的压缩算法,Google了很久,发现如果只是简单去除空白和注释的话,使用XLinq就可以轻易的实现 先看看MSDN是怎么说的: 一种常用方案是读取缩进的 XML,在内存中创建一个没有任何空白文本节点(即不保留空白)的 XML 树,对该 XML 执行某些操作,然后保存带缩进的 XML。在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。这是 LINQ to XML 的默认行为。 另一个常见的情况是读取和修改已经有意缩进的 XML。您可能不想以任何方式更改这种缩进。若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。 简单的说,XDocument载入时,默认使用LoadOptions::None,自动去掉XML的空白;保存时,默认使用SaveOptions::None,自动格式化XML。 也就是说,使用XDocument将一个HTML文档打开什么也不作就保存,其实等于实现了HTML的格式化。 而如果在保存时,使用SaveOptions::DisableFormatting参数,看似要保存XML的空白,由于载入时所有空白都被删掉了,其实等于删除了所有空白,于是去掉空白就这样实现了。 至于删掉注释也很简单,只是需要注意,一般页面嵌入JavaScript会使用注释节点包裹,需要例外处理。 整个HTML压缩代码如下: var nodes = from s in doc.DescendantNodes() where … Continue reading
开源项目:Page Releaser
使用js框架+Ajax模式的开发,总会造成大量的js文件导致网站传输效率降低,尤其在网络状况不佳的环境很容易出现整个网页无法使用,就如IE的那个经典错误,对象不支持此属性或方法。 js压缩合并的工具很多,我也基于JsMin做过JsMin#。不过因为调试的需要,仍然需要维护一个调试用得HTML,里面引用所有未压缩的js;再维护一个发布用得HTML,用来引用合并后的js。每次更新网页都非常不方便。 此后,开始构思更好的方法,于是有了Page Releaser的构想。 Page Releaser借鉴了C++中Release的概念,通过解析HTML提取js和css信息,并对它们进行压缩,合并,嵌入,再依照处理结果重新构建HTML,最终生成一套完整的发布版本。之所以叫Page,是因为它每次只处理一个HTML。(本来打算叫WebReleaser,但多HTML会牵涉到资源网页间共用的问题,比较复杂,自动化结果会很难评估。不过好在,像ExtJS这样的大型框架,任何应用一个HTML就够了:) Page Releaser的终极目标是将包含一个HTML,N个JS,N个CSS,N个图片的网站,最终压缩成一个HTML和一个图片,以最大的减少浏览器因为建立连接造成的效率浪费。 当然,浏览器建立最少的连接并不意味着网站就有最优化的效果,比如一张1000*1的图片和一张1*1000的图片无论怎么合并,生成新图片都会比原来的图片大得多,所以Page Releaser也提供各种参数以便产生针对性的最好效果。 目前放出的版本只是实现了js的压缩,合并,嵌入以及css的合并,嵌入,其他功能将逐步加入 Page Releaser安装 当然按照惯例,小工具一概开源,大家也可以自行下载代码编译: Page Releaser源码
集成Html Tidy
解析HTML最大的问题是不能使用标准的XML解析器,虽然很多新的网站开始逐步改用规范的XHTML,但只有出现一个<br>就会导致整个解析过程的失败,而好的HTML解析器却不是那么容易找到的,所以转换或许也是一个很好的选项 在google这个问题的时候,发现一个好东西HTML Tidy,W3C出品的,开源的小工具,可以将HTML转换成XHTML或XML HTML Tidy提供了编译好的exe文件,所以最初尝试在程序中通过进程方式直接调用,转换的速度很快,不过会出现一个控制台的黑窗口,大量处理时会比较麻烦。 后来查找Tidy的衍生库,发现EfTidy.net。EfTidy.net采用Warp技术,将C++的库直接引入到C#的项目中,用C#调用非常简单。可惜的是,这明显是老外的作品,没有考虑编码的问题,中文会被自动转换为类似#C2C8;这样的Unicode编码,显然这是无法忍受的。 之后又找到了Tidy的纯C#代码编写的库Tidy.net,虽然版本有点老且很难随Tidy的源版更新,不过毕竟是同源的C#代码,什么编码,语言之类的问题统统不存在,于是集成转换的问题解决了。 P.S. Tidy有很多各种各样的库,还有如Mark Tidy之类的,各有特点,大家有空可以试试,好用的话记得推荐给我哦:)
开源的私人项目???
今天在Google Code上逛的时候,碰到一个项目,介绍就写了八个字,“私人项目,非请勿入”。 不禁想到之前参加一个软件方面的培训,吃饭时,一个同行问大家,除了Google Code还有什么方便的代码库没有? 当时推荐他SourceForge,他细致的问了半天,最后得出不能用的结论,原因是无法限制别人下载他提交的代码 疑惑。。。半天才明白他的意思。 原来他需要和外网的人共享代码库,于是想用开源平台的代码库,但又不想开放代码。 这么用开源平台,无语中。。。。。 类似Google Code这样的在线代码库的确非常方便,我为了享受这种便利提交了不少代码,当然一旦提交,项目就不再“私人”了,于是索性开源。 但像文章开始的八字声明,就如同穿着“新装”的皇帝一边自己大大咧咧的裸着,一边又警告别人非礼勿视,未免有点可笑了。
我的开源项目
受惠于开源太多,开放一些小部件也算是某种回馈。其实,很多时候并不是开不开的问题,而是怎么开的问题。这里要特别感谢Google Code提供了如此简单便利的网站,让我很多时候不禁的想,不开源项目怎么管理:) 以下是目前已存在项目的清单,Google Code上的项目并不一定提供Release的版本,请大家自行使用SVN工具获取代码,如有问也题可直接在此留言,谢谢! 网站: My Tools Package – 提供一些小工具的Release版,不定期更新 Google Code项目: mytools360 – My Tools Package网站工具的源码 jeebookstore – 基于ExtJS的简单文档管理系统 sscs – 一个基于SDL的界面库
ExtJs的Ajax乱码问题
最近用ExtJS+Ashx开了一个小的开源项目JeebookStore. 之前一直用的英文做的测试都也没感觉有啥问题,上周末一上中文,乱码问题就骚扰了我一个周末。 最开始是FormPanel发送的数据到ashx的时候出现乱码,Google了一下这样的问题还挺多,把所有js和html转存为UTF-8,然后把调用js的html设置为UTF-8编码,当然Asp的Request和Response保持默认的UTF-8,Firefox上就没有乱码的问题了。 再试IE,发现FormPanel内的数据已经没有问题,但通过URL参数传递的中文还是不对。依次尝试使用escape,encodeURI,encodeURIComponent函数对URL进行编码,没有效果。 多次试验下发现如果使用Form.submit函数的params属性来传递参数,并且method为GET时,IE下的表现就是正常的。如: URL: ashx/AddFile.ashx?name=中国&path=/中国 Form.submit({ url : ‘ashx/AddFile.ashx’, method : ‘GET’, params : { name : ‘中国’, path : ‘/中国’; } }) 检查Action.Submit类的代码,发现ExtJS会在submit时使用params来拼接成如上的URL,之所以没有出现乱码,是因为分别对每个值进行了编码,而编码用的函数正是encodeURIComponent,只不过不像我之前那样直接对整个URL调用而已。 这番折腾又应了那句话,不合常理的问题往往是函数调用的问题。 总算IE和Firefox都可以正确处理中文了,可事情还没完,下载文件的文件名在FireFox变乱码了,当然还不算太乱,只不过是%E7%E9之类的显示而已。 检查发现我在返回文件名时,使用Server.UrlEncode对文件名做了UTF-8的编码,如果直接返回文件名则FireFox正常了,但IE同时变乱码,这次是彻底的乱码。貌似是因为FireFox对文件名的解析采用了ISOxxxx-1的编码而不是Http头中记录的编码类型。Google+研究了半天貌似没有好的解决办法,只好在ashx中做了浏览器的分支,即: HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser; if … Continue reading