免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: niaya
打印 上一主题 下一主题

问个关于Html标签整理的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-09 09:37 |只看该作者
我想问一下 $h->as_HTML('<>&',' ',{});
这句是什么意思?
我联动4楼和5楼的代码已经实现了基本的功能。
但是整理之后的代码  原来是<br=XXXXX>现在变成了<br=XXXXX />
其他TAG的结束也都变成了/>,这个是标准html转换的原因吗?怎么处理好些。

换句话说,虽然功能实现了,对于html的外观来讲也没有变化,但是现在Source换行的结构之类的都打乱了。
有没有办法不破坏html Source的段落结构?

论坛徽章:
0
12 [报告]
发表于 2009-02-09 09:40 |只看该作者
还有一个关于encode的小问题

中文的话是GBK
英文的话就不需要设定
日文的话 应该设定成什么 (JIS?)

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
13 [报告]
发表于 2009-02-09 10:15 |只看该作者
原帖由 niaya 于 2009-2-9 09:37 发表
我想问一下 $h->as_HTML('&',' ',{});
这句是什么意思?

  1.        $h->as_HTML() or $h->as_HTML($entities)

  2.        or $h->as_HTML($entities, $indent_char)

  3.        or $h->as_HTML($entities, $indent_char, \%optional_end_tags)

  4.        Returns a string representing in HTML the element and its descendants.  The optional argument $entities specifies a string of the entities to  encode.  For compatibility with previous versions, specify '<>&' here.  If omitted or undef, all unsafe characters are encoded as HTML entities. See HTML::Entities for details.  If passed an empty string, no entities are encoded.
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
14 [报告]
发表于 2009-02-09 10:16 |只看该作者
原帖由 niaya 于 2009-2-9 09:40 发表
还有一个关于encode的小问题

中文的话是GBK
英文的话就不需要设定
日文的话 应该设定成什么 (JIS?)

页面上没有编码信息吗?

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
15 [报告]
发表于 2009-02-09 10:39 |只看该作者

回复 #10 niaya 的帖子

换句话说,虽然功能实现了,对于html的外观来讲也没有变化,但是现在Source换行的结构之类的都打乱了。

这个好像不太好保证。

论坛徽章:
0
16 [报告]
发表于 2009-02-09 16:01 |只看该作者
原帖由 ynchnluiti 于 2009-2-9 10:16 发表

页面上没有编码信息吗?


这个已经看到了不得 charset后面那个 谢谢.

论坛徽章:
0
17 [报告]
发表于 2009-02-09 16:10 |只看该作者
刚才重新看了下

<span style="font-size:9.0pt; font-family:宋体"> 这个tag也被误删了.

只想删除<span lang=XXX><span class=XXX><span face=XXX>这三种<SPAN>和对应的</span>. 不知道哪里还有问题呢.


  1. my $encode = "GBK";
  2.   
  3.     my $tree = HTML::TreeBuilder->new_from_content( decode($encode, $html) );

  4.     my $p = $tree->look_down(_tag => q{p});

  5.     my $mainspan;
  6.     for my $span( $tree->look_down(_tag => q{span}) ){
  7.         if ( defined $span->attr('lang') ) {
  8.             $span->attr(lang=>undef);
  9.             $mainspan = $span;
  10.             last;
  11.          } elsif ( defined $span->attr('class') ) {
  12.             $span->attr(class=>undef);
  13.             $mainspan = $span;
  14.             last;
  15.          } elsif ( defined $span->attr('face') ) {
  16.             $span->attr(face=>undef);
  17.             $mainspan = $span;
  18.             last;
  19.          } else {
  20.           next;
  21.           }
  22.     }
  23. #print decode_entities($mainspan->as_HTML), "\n";

  24.     for my $span( $tree->look_down(_tag => q{span}) ){
  25.         $span->replace_with_content($span->content_refs_list);
  26.     }

  27.     my @content = $p->content_list;
  28.     $p->detach_content();

  29.     $mainspan->push_content(@content);
  30.     $p->push_content($mainspan);

  31.     $html = encode( $encode, $tree->as_HTML('<>&',' ',{}) ), "\n";
  32.    
  33.     $html =~ s/span_space/&nbsp;/g;

  34.     $tree->delete;
  35.    
  36. }
复制代码

论坛徽章:
0
18 [报告]
发表于 2009-02-09 18:01 |只看该作者
原帖由 niaya 于 2009-2-9 09:40 发表
还有一个关于encode的小问题

中文的话是GBK
英文的话就不需要设定
日文的话 应该设定成什么 (JIS?)

shift_jis

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
19 [报告]
发表于 2009-02-09 18:46 |只看该作者

回复 #16 niaya 的帖子

<p style='margin-top:0pt;margin-right:0pt;margin-bottom:0pt;margin-left:.0pt; '><span face=宋体><span class=GramE><span class=grame><span lang=EN-US style='font-size:9.0pt; font-family:宋体'><b> Perl </b><span face=宋体>是不同的语言。</span></b><span face=宋体>从一开始, </span><b><span face=宋体> Perl</span></b><span face=宋体>就设计成可以把简单工作简单化,</span><span
face=宋体><span style="mso-spacerun:yes">同时又不失</span></span><span face=宋体>去处理困难问题</span>
<span face=宋体>能力的语言。</span><o:p></o:p></span></span></span></span></p>

用下面代码得到的$mainspan是最外层的span(上面红色)。
蓝色部分代码有问题, 根据你前面的要求直接删除就行。
my $mainspan;
for my $span( $tree->look_down(_tag => q{span}) ){
    if ( defined $span->attr('lang') ) {
        $span->attr(lang=>undef);
        $mainspan = $span;
        last;
    } elsif ( defined $span->attr('class') ) {
        $span->attr(class=>undef);
        $mainspan = $span;
        last;
    } elsif ( defined $span->attr('face') ) {
        $span->attr(face=>undef);
        $mainspan = $span;
        last;
    } else {
        next;
    }

}

论坛徽章:
0
20 [报告]
发表于 2009-02-10 09:30 |只看该作者
原帖由 ynchnluiti 于 2009-2-9 18:46 发表

用下面代码得到的$mainspan是最外层的span(上面红色)。
蓝色部分代码有问题, 根据你前面的要求直接删除就行。


不好意思,上面的代码还是没太研究明白。
你给出的(6楼那段代码)应该是只对<span lang=XXX style=YYYYY>进行了处理吧。(变成了<span style=YYYYY>)
但是其他的<span>标签,比如说<span face=XXX><span lang=XXXX><span class=XXX>这样的TAG应该没有处理吧。

我那种写法的话,出来的结果是删掉了所有的span标签,但是现在还希望保留<span style=XXXX></span>这对标签。
我是Perl新手,有些地方看不大明白,还请多多赐教。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP