我想知道如何允许用户在其文本和其他符号中包含单引号而不会破坏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;
}
}
答案 0 :(得分:2)
这有两个步骤。
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>
答案 1 :(得分:0)
您始终可以使用模板文字语法而不是字符串连接。
confirm(`Are you sure you want to delete '${title}'`)
请注意,这是ES6功能。您需要像babel这样的转换器才能使其在所有浏览器中兼容。
答案 2 :(得分:-1)
如果你想在javascript中创建一个有效的字符串,你可以使用encodeURI()
https://www.w3schools.com/jsref/jsref_encodeuri.asp
如果你必须在PHP中执行它还有一个函数