2011-03-26 28 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