2011-03-26 51 views
0

当我两个问题:特殊字符生成使用HTML :: TreeBuilder作为与HTML ::元

  • 如果我用文字()或as_trimmed_text()函数取出任何文本,并希望在推一些元素,然后我需要使用HTML :: Entities :: encode_entities? :

    my $text=$node->as_trimmed_text(); 
    
    $a->push_content($text); # Do I need to use encode_entities here? 
    
  • 处理后的第二以及使用as_HTML(全HTML文档),它有时产生例如一些特殊字符:Â(Â)作为额外字符时,我看到的是在Dreamweaver单一的空间。
+0

如果您有两个问题,通常最好问两个单独的问题,而不是将它们组合。 – cjm 2011-03-26 16:49:24

回答

2

我有两个答案:

  • 假设你想要的$a内容是一样的$node的内容,你不需要encode_entitiespush_content插入传递的字符串作为文本节点而不是将其解析为标记。 OTOH,如果$node内容<span>(在HTML源表示为&lt;span&gt;)和你真正想要$a显示&lt;span&gt;,你会调用它的encode_entities(在HTML源为&amp;lt;span&amp;gt;表示)。
  • 很可能您的输入文本包含代码正在解释为Latin-1或类似编码的原始UTF-8字符。 “单个空间”字符实际上是U + 00A0,非破坏性空间,在UTF-8中由两个字节0xc2 0xa0表示,在Latin-1中解释时为“”和非破坏空间。
+0

关于你的第二个答案,你能告诉我如何删除或处理这些字符? – AgA 2011-03-27 05:49:08

+0

你可以用':utf8'输入层打开文件,让perl将UTF-8字节转换为perl的内部表示。或者您可以使用'Encode'模块中的方法以相同的方式解码UTF-8字节。或者换一种方式,如果您使用的是足够新的HTML :: TreeBuilder(和HTML :: Parser)版本,则可以使用'utf8_mode'方法。 – Anomie 2011-03-27 14:32:00