求救: 一个 <换行取文章> 问题. (高手请进) 从文件里面读出来最好拉file出来的数组,一个就是一行,省事儿了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 To kingerq(多菜鸟): 行数多少无所谓, 100 行一页,也可以,可能会有 几十页吧! 按行读: 固定好一行显示的字数后,取 <br> ,要处理 是如果不满一行,出现的 <br>, 还要进字数进行处理, 最重要的是这种方法,一下了把所有数据全取出来后才能处理. 你的数据在数据库里的话,我想只有一次性的读出了,读出之后,再进行分页,你看看下面的代码你是不是用得着呢??在论坛里找的没试过:P<?php// 文章分页函数,把一篇比较长的文章分为多页显示// divPage($text[,$pageNumber][,$pageSize][,$divTags][,$divGetVarName]);// $text,文章原文// $pageNumber,第几页// $pageSize,每页的字数// $divTags,文章分段时,每段的结尾以什么划分. 函数分页时,截取到离$pagesize最近的一个段落。// $divGetVarName,传输页数用什么变量表示.function divPage($text,$pageNumber=1,$pageSize=2500,$divTags="\r\n",$divGetVarName="artPage"){ global $SCRIPT_NAME,$QUERY_STRING; $startPos=$pageSize*($pageNumber-1); $endPos=$pageSize*$pageNumber; $textLength=strlen($text); if($startPos<=0) $startPos=0; else{ $startPos=strpos($text,$divTags,$startPos); } if($endPos>$textLength) $ret=substr($text,$startPos,$pageSize); else{ $endPos=strpos($text,$divTags,$endPos); $ret=substr($text,$startPos,($endPos-$startPos)); }// 下面的东西你需要自己改动一下,主要是生成分页连接的(上一页、下一页那种连接)。 $ret.=" <p align=center>"; $QUERY_STRING=ereg_replace("\&?$divGetVarName=[0-9]+","",$QUERY_STRING); if($startPos>$pageSize){ if($QUERY_STRING=="") $ret.="<a href=$SCRIPT_NAME?$divGetVarName=".($pageNumber-1).">【上一页】</a> "; else $ret.="<a href=$SCRIPT_NAME?$QUERY_STRING&$divGetVarName=".($pageNumber-1).">【上一页】</a> "; } if($endPos<$textLength){ if($QUERY_STRING=="") $ret.="<a href=$SCRIPT_NAME?$divGetVarName=".($pageNumber+1).">【下一页】</a> "; else $ret.="<a href=$SCRIPT_NAME?$QUERY_STRING&$divGetVarName=".($pageNumber+1).">【下一页】</a> "; } $ret.="</p>"; return $ret;}?> 这个问题远没有你想象的那么简单。需要解决的问题很多1、全角字和半角字的区分。这个比较容易解决2、英文单词的分词。可能要放一放了!3、文章中可能出现的html标记。需约定处理方式4、标点符号的禁则。不去管他?5、....要解决的这个问题,实际上是排版软件所做的工作。你至少要模拟textarea控件或记事本的做法在一个至少给定宽度的区域里逐字插入,直到该区域满了(如果给定了高度)依次类推直到文章结束 如果数据库里面很多文章,系统硬盘有够大,完全可以增加一个字段,就是生成文本的地址,然后编程自动把数据库里面的都保存成文件,然后直接file读出来就行了 是的,给你一个在浏览器中实现的方案。供参考<table border><tr><td><span ID=oDiv1 STYLE="height=100; width:90pt; text-align:left; font-size:9pt"></span></td><td><span ID=oDiv2 STYLE="height=100; width:90pt; text-align:left; font-size:9pt"></span></td></tr></table><script>var s= "我现在数据库里面有一篇<b>很长</b>的文章,我要把他读出来显示在页面上,但是一个页面显示太难看了,所以想分页显示,不知道要怎么做,偶比较菜,麻烦哪位好心人告诉我,尽量说得简单一点,我怕我看不懂。哈哈<br>";s += "这个问题用js解决较好。可以这样写,自己扩展一下吧";var hh = oDiv1.offsetHeight;for(i=0;i<s.length;i++) { oDiv1.innerHTML = s.substr(0,i); if(hh < oDiv1.scrollHeight) { do { oDiv1.innerHTML = s.substr(0,--i); }while(hh < oDiv1.scrollHeight); break; }}oDiv2.innerHTML = s.substr(i);</script> to xuzuning(唠叨):厉害,不愧“唠叨” to xuzuning(唠叨):方法确实不错,可是还考虑一个问题,分页时,如果他往前翻, 还要考虑开始字符. 你可以用数组记录各块在串中的起止位置,显示时用串截取方法取出这个工作一般可在内容提交时完成,并将分页符chr(12)插入后入库。以后只需按分页符分页即可 方法确实不错,可是如果这样, 我如何处发script 函数呢?如从数据库取完记录: $s=$rs[content];如何传给下面的函数:function readtext(s,i) { oDiv1.innerHTML = s.substr(s,i*4000);} 假定已用分页符做好了内容分割,且内容中的特殊字符已做处理$s=$rs[content];echo <<< JScontent = '$s'.split(/\f/); //按分页符切割成数组,从0起function readtext(i) { oDiv1.innerHTML = content[i];}JS;特殊字符处理按js的约定串$s中的' 换成 \' \r\n 换成 \\n To:s=$rs[content];echo <<< JScontent = '$s'.split(/\f/); //按分页符切割成数组,从0起function readtext(i) { oDiv1.innerHTML = content[i];}JS;你这写好像并不能执行 在 php 程序中 javascript 吧!这不是属于 程序 html 中传参吗? php安全-不用过滤mysql语言安全吗? 大家帮忙看看为什么我把代码放到服务器就不能上传图片?? PHP-GTK真的还是在玩具时代吗? 为什么我不能用imagettfbbox函数? PHP 代码 在下来框判断报错 哪里用这样的系统http://www.he183.com/lieche/ 紧急求救! javascript 数组的问题! Warning: Unable to open '' for reading: Permission php如何抓图? 一个json双引号问题 群发邮件缓冲的问题! 能否将一个表单中的内容分别同时写入两个数据表中?
可能会有 几十页吧! 按行读: 固定好一行显示的字数后,
取 <br> ,要处理 是如果不满一行,出现的 <br>, 还要进字数进行处理, 最重要的是这种方法,一下了把所有数据全取出来后才能处理.
你看看下面的代码你是不是用得着呢??在论坛里找的没试过:P
<?php
// 文章分页函数,把一篇比较长的文章分为多页显示// divPage($text[,$pageNumber][,$pageSize][,$divTags][,$divGetVarName]);// $text,文章原文// $pageNumber,第几页// $pageSize,每页的字数// $divTags,文章分段时,每段的结尾以什么划分. 函数分页时,截取到离$pagesize最近的一个段落。// $divGetVarName,传输页数用什么变量表示.function divPage($text,$pageNumber=1,$pageSize=2500,$divTags="\r\n",$divGetVarName="artPage"){ global $SCRIPT_NAME,$QUERY_STRING; $startPos=$pageSize*($pageNumber-1); $endPos=$pageSize*$pageNumber; $textLength=strlen($text); if($startPos<=0) $startPos=0; else{ $startPos=strpos($text,$divTags,$startPos); } if($endPos>$textLength) $ret=substr($text,$startPos,$pageSize); else{ $endPos=strpos($text,$divTags,$endPos); $ret=substr($text,$startPos,($endPos-$startPos)); }// 下面的东西你需要自己改动一下,主要是生成分页连接的(上一页、下一页那种连接)。 $ret.=" <p align=center>"; $QUERY_STRING=ereg_replace("\&?$divGetVarName=[0-9]+","",$QUERY_STRING); if($startPos>$pageSize){ if($QUERY_STRING=="") $ret.="<a href=$SCRIPT_NAME?$divGetVarName=".($pageNumber-1).">【上一页】</a> "; else $ret.="<a href=$SCRIPT_NAME?$QUERY_STRING&$divGetVarName=".($pageNumber-1).">【上一页】</a> "; } if($endPos<$textLength){ if($QUERY_STRING=="") $ret.="<a href=$SCRIPT_NAME?$divGetVarName=".($pageNumber+1).">【下一页】</a> "; else $ret.="<a href=$SCRIPT_NAME?$QUERY_STRING&$divGetVarName=".($pageNumber+1).">【下一页】</a> "; } $ret.="</p>"; return $ret;}
?>
1、全角字和半角字的区分。这个比较容易解决
2、英文单词的分词。可能要放一放了!
3、文章中可能出现的html标记。需约定处理方式
4、标点符号的禁则。不去管他?
5、....要解决的这个问题,实际上是排版软件所做的工作。
你至少要模拟textarea控件或记事本的做法
在一个至少给定宽度的区域里逐字插入,直到该区域满了(如果给定了高度)
依次类推直到文章结束
<tr>
<td>
<span ID=oDiv1 STYLE="height=100;
width:90pt; text-align:left; font-size:9pt">
</span>
</td>
<td>
<span ID=oDiv2 STYLE="height=100;
width:90pt; text-align:left; font-size:9pt">
</span>
</td>
</tr>
</table><script>
var s= "我现在数据库里面有一篇<b>很长</b>的文章,我要把他读出来显示在页面上,但是一个页面显示太难看了,所以想分页显示,不知道要怎么做,偶比较菜,麻烦哪位好心人告诉我,尽量说得简单一点,我怕我看不懂。哈哈<br>";
s += "这个问题用js解决较好。可以这样写,自己扩展一下吧";
var hh = oDiv1.offsetHeight;
for(i=0;i<s.length;i++) {
oDiv1.innerHTML = s.substr(0,i);
if(hh < oDiv1.scrollHeight) {
do {
oDiv1.innerHTML = s.substr(0,--i);
}while(hh < oDiv1.scrollHeight);
break;
}
}
oDiv2.innerHTML = s.substr(i);
</script>
分页时,如果他往前翻, 还要考虑开始字符.
以后只需按分页符分页即可
如从数据库取完记录:
$s=$rs[content];
如何传给下面的函数:function readtext(s,i)
{
oDiv1.innerHTML = s.substr(s,i*4000);
}
$s=$rs[content];
echo <<< JS
content = '$s'.split(/\f/); //按分页符切割成数组,从0起
function readtext(i) {
oDiv1.innerHTML = content[i];
}
JS;特殊字符处理
按js的约定串$s中的
' 换成 \'
\r\n 换成 \\n
s=$rs[content];
echo <<< JS
content = '$s'.split(/\f/); //按分页符切割成数组,从0起
function readtext(i) {
oDiv1.innerHTML = content[i];
}
JS;你这写好像并不能执行 在 php 程序中 javascript 吧!
这不是属于 程序 html 中传参吗?