Xiaoxia[PG]

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

我的代码13 条评论

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

每遇到一个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. 抱歉我的 blog 使用了大量的

  2. </*br*>

    * 号自行去掉

  3. 悲剧 - -

  4. 我以为xiaoxia的blog很受欢迎,一下子就三个回复,原来都是FB童鞋的贡献啊。。。

  5. To ForeverBell, * what's up?

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

  7. to kdm, 那不是搜狗浏览器的代理服务器IP么? 教育网用搜狗访问外部网络都是这个IP段吧。

  8. 为什么不借助正则表达式?

  9. 很少用正则,不熟练呢。也不清楚正则对中文的处理如何。

  10. 预览的时候标签由程序加上,那就规范了

    自己只要写文本就行了

  11. 要是插入图片呢?

  12. [img]图片地址[/img]

  13. 貌似也挺麻烦的。

发表评论

评论会经过自动审核,链接请勿超过 3 个。