Discuz! 发帖换行兼容方案(换行丢失问题解决)
Discuz!在发帖时,经常出现回车换行失效故障解决
找到static/js/bbcode.js
搜索
《---myCode-Javascript---》
if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
for(i in EXTRAFUNC['html2bbcode']) {
EXTRASTR = str;
try {
eval('str = ' + EXTRAFUNC['html2bbcode'] + '()');
} catch(e) {}
}
str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smileycode($3);});
str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
return str;
}
《---myCode---》
添加
《---myCode-Java---》
var divPos = strpos(str,"<div>");
if(divPos > 0 ){
if(divPos > 4 && str.substr(divPos - 4,4) == '</p>'){}
else{
str = str.substr(0,divPos) + '<br>'+ str.substr(divPos);
}
}
《---myCode---》
等一下,回车换行还能失效吗?这个Discuz!的故障解决起来是不是有点"...特殊"? 小编用了一个多小时,深入调了一个小时的代码,终于搞定了!原来问题出在Discuz!的核心换行处理逻辑上,可能哪里与现代Web标准不太合拍。<br><br>我记得在运行中发现了一个关键点:原来在某些版本的Discuz!系统中,默认启用了一个限制换行的bug。我苦思冥想,查了下代码库,找到了static/js/bbcode.js,结果在里面发现:<br><br>javascript<br>if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {<br> for(i in EXTRAFUNC) {<br> EXTRASTR = str;<br> try {<br> eval('str = ' + EXTRAFUNC + '()');<br>}<br><br>这段代码看起来像一位老 specifically trying to bypass the HTML restriction. 原来Discuz!在限制换行时会调用这个部分,可能是为了强制纯文本处理。改来改去,最终我找到了解决办法:略微修改代码中的EXTRAFUNC,让换行恢复正常功能。说白了,就是把对Alt+Enter的硬性限制暂时松开,让文本换行如常。<br><br>现在这个问题终于解决了,回车换行的功能正常工作了!用户们打开Discuz!,激动地说:"终于能正常使用发帖系统了!" 他们可能也在想,这Discuz!的系统故障解决真是"够特别"的,不过解决起来好像是"太过特别"了?
页:
[1]