怎么编写博客的文章预览程序

如题,想到一种方法,使用堆栈。

每遇到一个html标签,就压栈,当遇到它的关闭标签时,就出栈(当然,直到找到对应的关闭标签)。

不过,这就存在一个问题,如果是代码规范是html4而不是xhtml,则会遇到<br>
、<img>这类没有关闭标签的标签。早知道这样,当时博客代码就应该用xhtml来写。不过要改的话,很多文章都需要转换,还是算了。所以打消使用这种方法的念头。因为html天生具有较强的容错性,少了关闭标签,解释器自动会帮你补全,所以不用担心这个问题。

目前,我还是使用之前的方法,只需要保证不会把一个标签阶段就行了。

我定义两个计算变量,一个open,一个closed,分别用来记录<和>的数目。如果open==closed,则可以安全截断。另外还要考虑中文编码的问题。不能把一个utf8字给截断了,就出现乱码了。

我现在把之前的C代码直接改写为php代码如下:

 

/* 截取文章前部分 2009-9-24 17:19:03 */
function make_preview( $str, $id ){
        $open=0;
        $closed=0;
        $s = $str;
        if( strlen($s)<=128 )
                return $s;
        $len = strlen($s);
        for( $i=0, $j=0; $i<$len; $i++, $j++ ){
                //utf8
                if( $str[$i] == '<' ){
                        $open ++;
                }else if( $s[$i]=='>'){
                        $closed ++;
                }else if( ord($s[$i])>=0xF0 ){
                        $i+=3;
                        $j+=2;
                }else if( ord($s[$i])>=224 ){
                        $i+=2;
                        $j+=1;
                }else if( ord($s[$i])>=0xC0 ){
                        $i+=1;
                }
                if ( $open==$closed && $j > 128 ){
                        $s = substr( $s, 0, $i+1 );
                        $s .= "";

                        return $s;
                }
        }
        return $s;
}

怎么编写博客的文章预览程序》有13个想法

  1. kdm

    to Xiaoxia, 难道是我出现幻觉了,HD的表弟(219.234.81.×) 和 Xiaoxia(219.234.81.×)竟然在同个ip段。。。 还有Xiaoxia你的控制台怎么没密码?可以进去随便逛逛?

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据