javascript - 即使在转义后引用也会破坏语法

标签 javascript php yii2

我有一个按钮,它应该使用 2 个参数(一个整数和一个字符串)调用一个 Action 。我正在使用 Yii2。

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

它可以工作,但是当参数 title 包含单引号双引号 时,语法被破坏

我变成了这样:

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

我不知道如何解决这个问题。

最佳答案

您需要针对 JavaScript 对 PHP 字符串进行编码。然后您需要针对 HTML 对 JavaScript 进行编码。

<?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);
     }
}

关于javascript - 即使在转义后引用也会破坏语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162970/

相关文章:

javascript - 将平面等距矩形全景图的形状映射到 A 框架内的平面

java - 服务器错误或 Android 问题?

php - 多个连接在 Yii2 的 where 条件下表现不同

php - 如何在MySQL数据库中插入可变数据

Yii2 kartik 详细 View 隐藏标签

javascript - 在 Yii2 中动态添加输入字段

javascript - AngularJS - 如何在 Controller 中获取 ngRepeat 过滤结果引用

javascript - jQuery:通过 $(this) 使用 ".each"作为选择的选项

Javascript - 无法从脚本标签访问模块变量

javascript - 加密 Web 应用程序和服务器之间的数据