2012-04-09 83 views
1

this question on whitelisting HTML tags開始,我一直在試驗Jeremy Wall的go-html-transform。爲了改進可搜索的文檔,我在這裏問這個問題,而不是直接糾纏作者......希望這不是針對SO的工具特定的。使用go-html-transform預處理HTML:替換失敗

App Engine,最新的SDK。 Post.Body是[]字節。這工作:

package posts 

import (
    // ...  
    "html/template" 
    "code.google.com/p/go-html-transform/html/transform" 
    "code.google.com/p/go-html-transform/h5" 
) 

// ... 

// Pre-process post body, then return it to the template as HTML() 
// to avoid html/template's escaping allowable tags 
func (p *Post) BodyHTML() template.HTML { 
    doc, _ := transform.NewDoc(string(p.Body)) 
    t := transform.NewTransform(doc) 

    // Add some text to the end of any <strong></strong> nodes. 
    t.Apply(transform.AppendChildren(h5.Text("<em>Foo</em>")), "strong") 
    return template.HTML(t.String()) 
} 

結果:

<strong>Blarg.<em>Foo</em></strong> 

然而,如果不是AppendChildren的()我使用類似以下內容:

t.Apply(transform.Replace(h5.Text("<em>Foo</em>")), "strong") 

我得到一個內部服務器錯誤。我誤解了Replace()的用法嗎? The existing documentation暗示這種事情應該是可能的。

+1

您是否可以在發生恐慌時添加問題?你可能已經發現了一個錯誤。 – 2012-04-09 21:38:50

+1

實際上,我已經將問題隔離到測試用例並提交修復。假設你遇到了問題,我認爲你是。請參閱:http://code.google.com/p/go-html-transform/source/detail?r=941f7061b6cd9c3c3666f6da3554cdb9d211b539查看修復該問題的代碼。 – 2012-04-09 22:01:01

+1

問題歸檔。完成。 – Sonia 2012-04-09 22:07:13

回答

2

在App Engine外運行您的轉換代碼時,它會發生混亂,您可以在該位置看到源中的TODO。然後,閱讀代碼並不難,如果給定一個根節點,就會發生恐慌。

+1

是的,我一直想達到那個待辦事項一會兒。這給了我必要的推動。只是推動了修復。 – 2012-04-09 22:02:57

+0

我很高興你能從源頭索尼婭那裏知道,恐怕我不是那麼聰明!好想通過非GAE Go來運行它,我想這是使用App Engine作爲你的沙箱的一個缺點。 – 2012-04-10 06:51:28