BlogEngine 1.0中的编码问题及解决方案
2007-06-06 22:03
225 查看
似乎有不少朋友在下在BlogEngine 1.0的源代码之后会发现居然无法正确编译,因为{SiteRoot}\User Controls\CommentView.cs里的代码遇到了错误:
嗯?第一行代码为什么单引号没有封闭?作者怎么会把一个无法编译的版本发布出去呢?其实问题并非那么简单,不过我们姑且先将单引号补全吧。
编译,通过。进入任意一篇文章。咦,为什么又出现脚本错误了(如下),问题真多啊……
打开客户端的代码一看,果然有错误:
哎,为什么……又是引号没有配对,而且又出现问号了?不如上官方网站http://www.dotnetblogengine.net看看吧。
官方网站其实也用了Blog Engine,但是进入查看文章页面后却没有发生问题。找到AddComment方法一看,果然!
问题出现了,就是这个古怪的字符“¤”坏了事。由于我们的编辑器无法识别出这个字符,因此就将它和后面的引号一起变成了问号。那么,到底这个符号是做什么用的呢?我们又该如何修改它呢?
经过简单的代码分析(猜测?)就可以发现,这段代码的作用是使用AJAX方式添加评论,那个古怪的字符“¤”的作用是分隔一些信息。因为在添加注释时,作者名、Email、URL、国家和评论内容会拼接成一个字符串并作为body给post到服务器端去,所以需要一个在这些文字中都不出现的字符(串)来作为分隔符。服务器端的代码也出现了问题,也就是因为它需要使用这种特殊字符拆分客户端post过来的内容。
要解决它自然很简单,我们只需要使用一段不会出现在文字中的字符(串)即可。我不希望再用这种特殊的字符,因此我最终将两段代码改成了如下模样:
我使用“?/?/?”替换了那个特殊字符,只要用户在回复评论时不输入这段字符串就好了。
上周我在移植我的英文blog系统时也遇到过,幸好没有多久就顺利地解决了这个问题。目前我的英文blog系统http://blog.jeffzon.net使用的便是Blog Engine 1.0,我在源代码的基础上也作了一些简单的修改,增加了一些功能。例如像博客园在首页显示Description的做法,大家访问我的英文blog时可以发现,系统首页上并没有完整的文章内容,而是有选择地显示了文章的Description,并添加了“read more...”链接。这样的做法似乎更合理一些,抑或是我已经习惯博客园了?:)
点击这里可以下载到修改后的CommentView.ascx和CommentView.ascx.cs文件。
public void RaiseCallbackEvent(string eventArgument) { string[] args = eventArgument.Split('?); string author = args[0]; string email = args[1]; string website = args[2]; string country = args[3]; string content = args[4]; // ... }
嗯?第一行代码为什么单引号没有封闭?作者怎么会把一个无法编译的版本发布出去呢?其实问题并非那么简单,不过我们姑且先将单引号补全吧。
编译,通过。进入任意一篇文章。咦,为什么又出现脚本错误了(如下),问题真多啊……
打开客户端的代码一看,果然有错误:
function AddComment() { // ... var argument = author + "? + email + "? + website + "? + country + "? + content; // ... }
哎,为什么……又是引号没有配对,而且又出现问号了?不如上官方网站http://www.dotnetblogengine.net看看吧。
官方网站其实也用了Blog Engine,但是进入查看文章页面后却没有发生问题。找到AddComment方法一看,果然!
function AddComment() { // ... var argument = author + "¤" + email + "¤" + website + "¤" + country + "¤" + content; // ... }
问题出现了,就是这个古怪的字符“¤”坏了事。由于我们的编辑器无法识别出这个字符,因此就将它和后面的引号一起变成了问号。那么,到底这个符号是做什么用的呢?我们又该如何修改它呢?
经过简单的代码分析(猜测?)就可以发现,这段代码的作用是使用AJAX方式添加评论,那个古怪的字符“¤”的作用是分隔一些信息。因为在添加注释时,作者名、Email、URL、国家和评论内容会拼接成一个字符串并作为body给post到服务器端去,所以需要一个在这些文字中都不出现的字符(串)来作为分隔符。服务器端的代码也出现了问题,也就是因为它需要使用这种特殊字符拆分客户端post过来的内容。
要解决它自然很简单,我们只需要使用一段不会出现在文字中的字符(串)即可。我不希望再用这种特殊的字符,因此我最终将两段代码改成了如下模样:
public void RaiseCallbackEvent(string eventArgument) { string[] args = eventArgument.Split(new string[] { "?/?/?" }, StringSplitOptions.None); string author = args[0]; string email = args[1]; string website = args[2]; string country = args[3]; string content = args[4]; // ... }
function AddComment() { // ... var argument = author + "?/?/?" + email + "?/?/?" + website + "?/?/?" + country + "?/?/?" + content; // ... }
我使用“?/?/?”替换了那个特殊字符,只要用户在回复评论时不输入这段字符串就好了。
上周我在移植我的英文blog系统时也遇到过,幸好没有多久就顺利地解决了这个问题。目前我的英文blog系统http://blog.jeffzon.net使用的便是Blog Engine 1.0,我在源代码的基础上也作了一些简单的修改,增加了一些功能。例如像博客园在首页显示Description的做法,大家访问我的英文blog时可以发现,系统首页上并没有完整的文章内容,而是有选择地显示了文章的Description,并添加了“read more...”链接。这样的做法似乎更合理一些,抑或是我已经习惯博客园了?:)
点击这里可以下载到修改后的CommentView.ascx和CommentView.ascx.cs文件。
相关文章推荐
- BlogEngine 1.0中的编码问题及解决方案
- BlogEngine 1.0中的编码问题及解决方案
- 关于xml编码问题在VB,PHP,JAVA下的解决方案
- Spring with Tomcat 中文编码问题的解决方案
- 网页语言编码及asp乱码问题解决方案
- java 项目 存入mysql后 变问号 MySql 5.6 (X64) 解压版 1067错误与编码问题的解决方案
- Mac环境mysql5.7.21 utf8编码问题及解决方案
- 编码问题,修改mysql ini文件无效的一种解决方案
- 明明编码都是utf-8但是抓包和第三方接口收到的数据都是乱码问题的原因和解决方案
- 关于xml编码问题在VB,PHP,JAVA下的解决方案
- Spring with Tomcat 中文编码问题的解决方案
- 关于xml编码问题在VB,PHP,JAVA下的解决方案
- Java编码问题完全解决方案
- 对于ASP编码问题的深入研究与最终解决方案
- 在ASP.NET AJAX Control Toolkit 1.0中使用GB2312的编码时出现乱码的两种解决方案
- Ajax缓存和编码问题的最终解决方案
- Mysql中文乱码问题完美解决方案【需要在my.cnf文件中设置client和mysqld的default-character-set=utf8,建数据库和表的时候也需要制定好编码】
- hibernate 自动导入sql 文件import.sql 国际化编码的问题的解决方案
- 【Python】Python2.7 编码问题:'ascii' codec can't encode characters in position 的解决方案
- 关于xml编码问题在VB,PHP,JAVA下的解决方案