【问题标题】:Passing parameter with double quotes [closed]用双引号传递参数[关闭]
【发布时间】:2014-12-31 13:20:21
【问题描述】:

我正在尝试传递带有字符“的变量,但是“大爆炸”的“有问题。

<?php
   echo $aux; //Hi! "Text" Text2'Text3
?>

//mysql_real_escape_string($aux);
addslashes($aux); //return Hi! \"Big Bang\" Text\'Text2 

<a onclick="share('<?= $aux ?>')">Send</a>

【问题讨论】:

    标签: javascript php variables parameters quote


    【解决方案1】:

    您应该做的是生成一个 JavaScript 字符串,因此您需要为 JavaScript (json_encode()) 转义并删除对 addslashes 的调用,该调用用于转义 PHP。

    <a onclick='share(<?= json_encode($aux) ?>)'>Send</a>
    

    请注意,如果您的 PHP 字符串中有任何 HTML 实体,例如 &amp;lt;,它们将被 HTML 解析器解码。这就是 HTML 编码引号的问题,它们被解码为 JavaScript 引号中的引号。

    理想情况下,您应该将关注点分开以避免将 3 种语言结合起来。

    以下示例使来自 PHP 的数据在 JavaScript 中可用(JavaScript 转义)

    <a id='share-link'>Send</a>
    <script>
    document.getElementById('share-link').addEventListener('click', function() {
       var shareContent = <?= json_encode($aux) ?>;
       share(shareContent);
    });
    </script>
    

    或者您可以将 PHP 中的数据嵌入到数据属性中(HTML 转义)

    <a id="share-link" data-share-content="<?= htmlentities($aux) ?>">Send</a>
    <script>
    document.getElementById('share-link').addEventListener('click', function() {
       share( this.getAttribute("data-share-content") );
    });
    </script>
    

    你甚至可以回到你的内联脚本(不推荐)

    <a id="share-link" 
       onclick="share(this.getAttribute('data-share-content'))"
       data-share-content="<?= htmlentities($aux) ?>"
    >Send</a>
    

    【讨论】:

    • 错误: 发送
    • @Zarlok 请注意,我在onclick='share()' 周围使用了单引号,因为json_encode 将创建一个双引号字符串。你没有使用我建议的代码
    • @Zarlok 在 JavaScript 字符串属性中转义 HTML 实体似乎不是一个好主意,只使用 json_encode,因为我已经更新了我的使用答案
    • 使用 json_encode 不起作用...
    • @Zarlok“不起作用”不是一个很有帮助的评论。你应该总是解释问题是什么。显示实际输出的 HTML。查看我的更新
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2017-10-31
    • 2013-06-22
    • 2019-11-20
    相关资源
    最近更新 更多