使用Javascript添加动态HTML的字符串问题

时间:2011-06-13 22:56:38

标签: php javascript escaping innerhtml

我正在使用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,但也没有成功。

3 个答案:

答案 0 :(得分:3)

我主要使用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>

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

答案 1 :(得分:0)

像这样逃跑

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

答案 2 :(得分:0)