В нашем Rails 3.2.13 приложения, мы имеем этот код в одном из наших взглядов Еврорадио:Струны быть некстати спаслась, когда введен в текстовые поля
<script language="javascript">
function copy_address()
{
document.getElementById("account_firm_name").value = '<%= escape_javascript firm_name %>';
document.getElementById("account_address_line_1").value = '<%= escape_javascript address %>';
document.getElementById("account_city").value = '<%= escape_javascript city %>';
document.getElementById("account_state_id").value = '<%= escape_javascript state_id.to_s %>';
document.getElementById("account_zip_code").value = '<%= escape_javascript zip %>';
}
</script>
<%# snip %>
<%= form_tag %>
<table>
<tr class="two_columns">
<td><label for="firm_name">Firm Name*</label></td>
<td><%= text_field 'account', 'firm_name' %></td>
</tr>
<%# snip %>
</table>
</form>
Это форма Rails и функция JS, которая копирует некоторые известные значения в форму.
Если есть какие-либо специальные символы в firm_name
, address
, city
или zip
строк, которые вводятся с помощью Еврорадио, они неподобающим HTML убежали. Например, если firm_name = '&'
, то генерируется HTML-включает в себя функцию JS:
<script language="javascript">
function copy_address()
{
document.getElementById("account_firm_name").value = '&';
// snip
и выполнение функции вставляет строку &
(не &
) в соответствующее текстовое поле в форме.
Есть ли безопасный способ избежать того, чтобы ERB избежал значений строк или способа использования JavaScript, чтобы избежать использования строк, прежде чем помещать их в текстовые поля?
(До сих пор, я попытался с помощью .html_safe
и raw
Rails методы, но не кости.)
Как насчет печати JSON-кодированного объекта, а затем использовать его в JavaScript? – elclanrs
Не могли бы вы использовать 'sanitize' в контроллере, тогда вам не нужно было бы' escape_javascript' в представлении –
@n_i_c_k: Недавно я добавил 'escape_javascript', пытаясь заставить его работать. Поведение одинаково без этих вызовов. – Kevin