我想知道如何在不破坏 javascript 代码的情况下允许用户在他们的文本和其他符号中使用单引号。现在,如果用户写了一个标题,例如“我不会”,它会破坏 javascript 代码。
<a class="delete_post" href="javascript:delpost('<?php echo $row['id']; ?>','<?php echo $row['postTitle']; ?>')">Delete post</a>
function delpost(id, title) {
if (confirm("Are you sure you want to delete '" + title + "'")) {
window.location.href = '../../backend/posts/delete-post.php?delpost=' + id;
}
}
最佳答案
这有两个步骤。
- 将 PHP 字符串转换为 JavaScript 字符串文字
- 使 JavaScript 字符串文字安全地插入到 HTML 中
json_encode
将处理第一个(JSON 是一种数据格式,或多或少是 JavaScript 的一个子集)。请注意,它将添加使其成为 JS 字符串文字所需的引号。
htmlspecialchars
将处理另一个。
<a class="delete_post"
href="javascript:delpost(<?php echo htmlspecialchars(json_encode($row['id'])); ?>,<?php echo htmlspecialchars(json_encode($row['postTitle'])); ?>)">
Delete post
</a>
也就是说……
更好的方法是使用更合适的标记。
您没有在任何地方链接,因此您不应该使用链接,并且在不需要时让代码完全依赖于 JavaScript。由于您正在对服务器进行重大更改(通过删除某些内容),因此您应该使用 POST 请求,而不是 GET 请求。
编写不引人注目的 JavaScript。
<form class="deletepost" action="deletepost" method="post">
<button>Delete post</button>
<input type="hidden" name="id" value="<?php echo htmlspecialchars($row['id']);?>">
<input type="hidden" name="postTitle" value="<?php echo htmlspecialchars($row['postTitle']);?>">
</form>
<script>
addEventListener("submit", function (event) {
if (event.target.classList.contains("deletepost")) {
var elements = event.target.elements;
if (!confirm("Are you sure you want to delete '" + elements.postTitle.value + "'?")) {
event.preventDefault();
}
}
});
</script>
关于javascript - 文本中断javascript中的单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084833/