在打破javascript的文本中的单引号

时间:2018-01-03 20:42:27

标签: javascript php

我想知道如何允许用户在其文本和其他符号中包含单引号而不会破坏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;
  }
}

3 个答案:

答案 0 :(得分:2)

这有两个步骤。

  1. 将PHP字符串转换为JavaScript字符串文字
  2. 使JavaScript字符串文字安全,可插入HTML
  3. 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中执行它还有一个函数

http://php.net/manual/fr/function.htmlspecialchars.php