BlogEngine 1.0中的编码问题及解决方案

简介:
似乎有不少朋友在下在BlogEngine 1.0的源代码之后会发现居然无法正确编译,因为{SiteRoot}\User Controls\CommentView.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];
    // ...
}
  嗯?第一行代码为什么单引号没有封闭?作者怎么会把一个无法编译的版本发布出去呢?其实问题并非那么简单,不过我们姑且先将单引号补全吧。
  编译,通过。进入任意一篇文章。咦,为什么又出现脚本错误了(如下),问题真多啊……
Script
  打开客户端的代码一看,果然有错误:
function AddComment()
{
    // ...
    var argument = author + "? + email + "? + website + "? + country + "? + content;
    // ...
}
  哎,为什么……又是引号没有配对,而且又出现问号了?不如上官方网站 [url]http://www.dotnetblogengine.net[/url]看看吧。
  官方网站其实也用了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系统 [url]http://blog.jeffzon.net[/url]使用的便是Blog Engine 1.0,我在源代码的基础上也作了一些简单的修改,增加了一些功能。例如像博客园在首页显示Description的做法,大家访问我的英文blog时可以发现,系统首页上并没有完整的文章内容,而是有选择地显示了文章的Description,并添加了“read more...”链接。这样的做法似乎更合理一些,抑或是我已经习惯博客园了?:)


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/59881,如需转载请自行联系原作者
相关文章
|
3月前
|
JavaScript 前端开发 Java
JMETER也会遇到加密难题,一并处理中文响应乱码
本文讨论了在JMeter中处理加密数据和中文响应乱码的问题,提供了使用BeanShell后处理器进行AES加密的示例代码,说明了如何将自定义的jar包放入JMeter的lib/ext目录以扩展功能,并给出了解决中文乱码的几种方法。
44 1
JMETER也会遇到加密难题,一并处理中文响应乱码
|
3月前
|
存储 自然语言处理
字符编码问题之Unicode传统字符编码方案中的语言编码冲突如何解决
字符编码问题之Unicode传统字符编码方案中的语言编码冲突如何解决
51 1
|
6月前
|
设计模式 测试技术 开发者
编码之道:从函数到系统的思考
【5月更文挑战第17天】 在软件开发的世界中,每一行代码都是建筑高楼的砖石。本文将探讨如何从基本的函数编写出发,逐渐构建起复杂系统的设计理念与实践技巧。我们将深入理解模块化、可重用性、测试驱动开发以及设计模式等概念,并讨论它们是如何帮助开发者提升代码质量、促进项目可持续发展的。通过实例分析和经验分享,本文旨在为追求卓越编码技能的开发者提供一份实用指南。
|
Java 关系型数据库 MySQL
JavaWeb 乱码问题终极解决方案!
JavaWeb 乱码问题终极解决方案!
|
SQL 数据可视化 数据挖掘
运营学Python|一文搞定编码环境
运营学Python|一文搞定编码环境
239 0
运营学Python|一文搞定编码环境
|
存储 Java
【字符编码】Java编码格式探秘
  在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符,字符用char来存储,此时,突然想到,Java里面的char可以存放中文吗?后来发现是可以的,并且由此也引出了Java中字符的编码格式问题。
124 0
【字符编码】Java编码格式探秘
|
程序员
良好的代码格式反映了程序员的编码能力,好的程序员应该这么编码
大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果 是非空代码块则: 1) 左大括号前不换行。 2) 左大括号后换行。
1122 0
|
存储
编码问题(总结网络的)
什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a 1 等字符 计算机中是没有存储字符的,但是我们却看到了。
1205 0