Jun 3

[原]Bo-Blog 2.1.1 与SyntaxHighlighter 插件中HTML冲突问题 晴

linuxing , 12:39 , 编程 » Php , 评论(0) , 引用(0) , 阅读(62533) , Via 本站原创 | |
    前两天在写[原]Python 框架TurboGears 2 入门文档《Wiki Tutorial》翻译校正一文时,发现若在代码段【codes】中使用html 标记,会出现代码最后出现一些垃圾标记。经排查,原来是Bo-Blog 2.1.1 与SyntaxHighlighter 插件中HTML部分冲突的问题。在修改Bo-Blog 的代码后,问题解决。

一、问题
编写日志时,使用【codes=html】和【/codes】对HTML 代码进行标记。但在查看日志时,发现HTML 代码后面有一长串的垃圾字符串,如图:
点击在新窗口中浏览此图片

重新编辑日志,日志中的内容是正常的,可见问题出在程序输出显示部分。

二、排查问题
为了便于查看代码,我使用的是dphighlighter(dp.SyntaxHighlighter For UBB)插件,而在日常的使用中,如C、Python、PHP的代码时都没发现异常问题,只有这次HTML 代码比较奇怪。
从上图中被追加的垃圾尾部信息来看,额外添加的是runtime 信息,怀疑是程序在输出模板时,替换字符串导致的。
检查Bo-Blog 的代码,发现index.php 中有以下内容:


关键是最后一行的str_replace() 函数替换,这里只要匹配上body结尾标签,就会被追加$runtimedisplay 的输出,正是导致问题的原因。(出问题的HTML代码正是包含body 结尾标签的)

再看看模板的HTML 代码部分。我当前使用的是meSimple 样式模板,从template/meSimple 目录下的elements.php 文件,可以看到以下内容:


问题已经很清晰,就是str_replace()执行替换时,仅单纯的把显示运行时间的javascript 追加到body 结尾标签中。

三、解决问题
既然找到问题,那么解决也很简单,只有修改str_replace() 部分的代码,不要去匹配简单的body 结尾标签,改而匹配id="processtime" 标签。反正javascript 代码的实际作用也是把内容输出到这里而已。

修改index.php 内容如下:



再次查看日志页面:
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片

很好,HTML 高亮正常,运行时间显示正常,问题顺利解决。

不过,从后台代码来看,Bo-Blog 的架构也实在有点老了,虽然支持模板视图,但毕竟还是以PHP代码输出为主,速度可能快些,但修改麻烦,Bug也不少。官网又长时间没有更新,看来是时候更换其他博客了,还是自己写一个呢?

补丁本地下载:
下载文件
这个文件只能在登入之后下载。请先 注册登入
Tags:
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]