2017-02-10 2 views
1

У меня есть кнопка, которая должна вызывать действие с двумя параметрами (целым числом и строкой). Я использую Yii2.Цитата разрушает синтаксис даже после выхода

<button class="button_answer" 
    onclick="submitAnswer(
      <?php echo $id ?>, 
      <?php echo '\''.Html::encode($title).'\''?> 
    );"> 
    Submit your answer 
</button> 

он работает, но когда параметр название содержит одиночные кавычки или двойных кавычек, синтаксиса разбиваются.

я стал чем-то вроде этого:

<button class="button_answer" onclick="submitAnswer(214, 'What's the ...?');"> 
    Post your answer 
</button> 

Я не знаю, как решить эту проблему.

ответ

5

Вам нужно закодировать строку PHP для JavaScript. Затем вам нужно закодировать JavaScript для HTML.

<?php 
$js_string_title = json_encode($title); 
$js = "submitAnswer($id, $js_string_title)"; 
$html_safe_js = htmlspecialchars($js); 
?> 

<button class="button_answer" 
    onclick="<?php echo $html_safe_js; ?>"> 
    Submit your answer 
</button> 

приятнее подход был бы избежать встраивания в JS в целом:

<button class="button_answer" 
     data-id="<?php echo htmlspecialchars($id); ?>" 
     data-title="<?php echo htmlspecialchars($title); ?>"> 
    Post your answer 
</button> 

Наряду с чем-то вроде:

addEventListener("click", answer_handler); 

function answer_handler(event) { 
    var el = event.target; 
    if (el.classList.contains("button_answer")) { 
     submitAnswer(el.dataset.id, el.dataset.title); 
    } 
} 
+0

Ok. Теперь работает. Спасибо за объяснения. Я думал, что функция encode Yii Framework интегрирует функцию htmlspecialchars. +1 спасибо – stfsngue

+0

@stfsngue - Вероятно, это так ... но у него нет причин включать 'json_encode'. – Quentin

+0

Теперь я понимаю. По крайней мере, я только что кое-что узнал от вас. Благодарю. Я отмечаю, как разрешено. – stfsngue

Смежные вопросы