2011-11-08 12 views
0

でエンコードされたとして、DBの値をデコード:考えるとHTMLは、私が持っているかを出力する私のデータベースに入力フィールド

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

データベースの内容を制御できる場合は、データベースにテキストをエンコードしないといいでしょう。テキストを "Hello & Goodbye3"として保存する必要があります。

詳細については、Should we HTML-encode special characters before storing them in the database?を参照してください。

+0

タイトル欄が実際に生のHTMLでない限り(つまり、「Hello さようなら」というタグは有効です)、私は同意します。テキストだけであることを意味していたのであれば、間違いなくそれをプリエンコードしてください。 –

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/を参照してください。