2013-07-28 33 views
0

我使用html編碼爲我的表單輸入字段。我有一個表單來創建一個新的用戶對象,其中可以爲新用戶插入一個名稱。爲了防止腳本注入這個輸入字段,我在下面列出的save()動作中做encodeAsHTML()如何在Grails中對HTML屬性進行HTML編碼時正確驗證域類?

問題: 1.輸入的名稱是:Schäfchen 2.這將正確下面 3. HTML編碼我的驗證規則後進行驗證變換成\ AUML將失敗驗證

哪有我實現了,在HTML編碼的名稱將被正確驗證?

鑑於以下的Grails類:

class User { 
    String name 
    static constraints = { 
    name blank: false, validator: { val, obj ->      
       Pattern pattern = Pattern.compile("[a-zA-Z0-9äöüßÄÖÜ\\- ]+") 
     pattern.matcher(val).matches() 
    } 
    } 
} 
在我UserController.groovy

dev save() { 
    def name = params?.name?.encodeAsHTML() 
    def user = new User() 
    user.name = name 
    user.save() 
} 
+0

爲什麼你的數據爲html在域編碼?在頁面上顯示時,您始終可以/應將其編碼爲html。 –

+0

你可以給一些示例代碼嗎?何時使用encodeAsHTML()以及何時使用decodeHTML()? – confile

回答

1

您應該使用encodeAsHTML()只在您的GSP視圖。

請參見:http://grails.org/doc/latest/ref/Tags/each.html

<tbody> 
<g:each status="i" in="${itemList}" var="item"> 
    <!-- Alternate CSS classes for the rows. --> 
    <tr class="${ (i % 2) == 0 ? 'a' : 'b'}"> 
    <td>${item.id?.encodeAsHTML()}</td> 
    <td>${item.parentId?.encodeAsHTML()}</td> 
    <td>${item.type?.encodeAsHTML()}</td> 
    <td>${item.status?.encodeAsHTML()}</td> 
</tr> 
</g:each> 
</tbody> 
+1

而不是一遍又一遍地做這個,你可以將html設置爲默認編碼。 'grails.views.default.codec =「html」' –

+1

隨着你的解決方案,你會遇到一些插件的問題。 – 2013-07-30 16:15:16

相關問題