2011-11-08 61 views
0

在我的數據庫,我有:給定的HTML解碼的DB值如何輸出編碼輸入字段中

ListItem.title = Hello & Goodbye3  

然後在我的觀點,我有:在這裏

ko.mapping.updateFromJS(List.list_items_open, <%= raw @list.list_items.where(:completed => false).to_json(:only => [:id, :title, :completed, :position]) %>); 

<ol data-bind='template: { name: "list_item_template", foreach: List.list_items_open}'></ol> 

<script type="text/html" id="list_item_template"> 
    <li class="listItem"> 
    <input class="list_item_title" maxlength="250" name="list_item[title]" type="text" data-bind="value: title> 
    </li> 
</script> 

問題是,在輸入端的值被呈現爲:

Hello &amp; Goodbye3 

而且不是:

Hello & Goodbye3 

我應該如何處理這個問題的任何想法?我應該將其編碼爲原始編碼嗎?謝謝

回答

2

如果你有控制數據庫中的內容,我會說不要編碼數據庫中的文本。你應該將你的文本存儲爲「你好&再見3」。

有關更多討論,請參閱Should we HTML-encode special characters before storing them in the database?

+0

我同意,除非標題列實際上是爲了原始html(就像你可以添加標籤,即「你好再見'是一個有效的值)。如果它僅僅是文字,絕對不要預編碼。 –

0

如果你沒有在數據庫中,你可以使用一個dependentObservable與編碼和解碼涉及的內容控制:

<p data-bind="text:name"></p> 
<input type="text" data-bind="value: nameConverted "></input> 

var viewModel = { 
    name: ko.observable('Hello &amp; Goodbye3') 
}; 

viewModel.nameConverted = ko.dependentObservable({ 
    read: function() { 
     return htmlDecode(this.name()); 
    }, 
    write: function(value) { 
     this.name(htmlEncode(value)); 
    }, 
    owner: viewModel 
}); 

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

function htmlDecode(value){ 
    return $('<div/>').html(value).text(); 
} 

ko.applyBindings(viewModel); 

http://jsfiddle.net/unklefolk/k8jYN/的工作示例。