【问题标题】:String issue with Javascript adding dynamic HTMLJavascript添加动态HTML的字符串问题
【发布时间】:2011-09-14 07:22:14
【问题描述】:

我正在使用 PHP 生成一个 Javascript 按钮,该按钮添加了一个复选框和一些其他 HTML。

转义这些字符以将它们包含在 onclick 事件中的正确方法是什么?

我看到有人建议将 ' 和 " 转换为 ascii 值,但这似乎没有帮助。

$tempOutput = "<a href='temp.txt'>\"Happy\"</a>";
$tempOutput = str_replace("'", "&#39;", $tempOutput);
$tempOutput = str_replace('"', "&quot;", $tempOutput);

如果您在使用前回显字符串,只会导致此结果:

<a href=&#39;temp.txt&#39;>&quot;Happy&quot;</a>

如果你检查页面元素:

<a onclick="
                    var divTag = document.createElement('div');
                    divTag.innerHTML = '&lt;a href='temp.txt'&gt;&quot;Happy&quot;&lt;/a&gt;';
                    document.getElementById('extraDiv').appendChild(divTag) ;
                ">test</a>

我也尝试过仅附加到 extradiv 的 innerHTML,但也没有成功。

【问题讨论】:

    标签: php javascript escaping innerhtml


    【解决方案1】:

    我主要使用 PHP 的 rawurlencode() 和 Javascript 的 unescape():

      <?php
        $tempOutput = '<a href="temp.txt">'.htmlentities('"Happy"').'</a>';
      ?>
      <a onclick="
                  var divTag = document.createElement('div');
                  divTag.innerHTML = unescape('<?php echo rawurlencode($tempOutput);?>');
                  document.getElementById('extraDiv').appendChild(divTag) ;
                 ">test</a>
      <div id="extraDiv"></div>
    

    这也将避免其他字符的错误,例如换行符。

    【讨论】:

    • 谢谢。除了您必须先执行 htmlentities() 之外,此方法有效。我基本上不能这样做,因为 HTML 是从另一个来源返回的。在将其放入 onclick 之前,我不会立即生成它。整个字符串上的 htmlentities() 并不完全有效。只要 HTML 中的任何文本中没有双引号,基本上一切都可以。
    【解决方案2】:

    这样逃跑

    $tempOutput = str_replace(array("'",'"'), array("\'",'&quot;'), $tempOutput);
    

    【讨论】:

    • 这适用于非常简单的示例,但对于更复杂的示例再次抛出错误,但这是一个开始,谢谢。
    【解决方案3】:

    【讨论】:

    • 我想我想要的恰恰相反,但谢谢。我的输入已经是这种格式了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多