【问题标题】:Javascript Object Not Digging My PHP Var's Value (Has HTML in It)Javascript 对象没有挖掘我的 PHP Var 的值(其中包含 HTML)
【发布时间】:2010-02-10 00:45:56
【问题描述】:

我正在为客户构建 CMS(基于 wordpress 构建)。我从数据库返回的一些数据有问题。

基本上,我是从 PHP 数据构建 Javascript 对象,以便在单击鼠标时更新网站的某些区域。

示例(这可以正常工作):

<script language = "Javascript>
  var myObject = new Object();

        function updateDiv(id)
        {
           myObject.name = '<?php echo $valueName ?>'; // $varHeadline = "Bob"
           myObject.headline = '<?php echo $value_headline ?>'; // $varHeadline = "My Story"

           var div = document.getElementById(id).innerHTML = myObject.name + 
           '<br>' + myObject.headline';
        }
</script>

当我从数据库中带回的数据中已经有一些 html 或换行时,就会出现问题。

例子:

    echo $varHeadline;
    // returns <h1>This is my headline</h1>
   //            This is part of the value too.

因此,如果我使用该数据创建一个 Javascript 对象:

function updateDiv(id)
{
  myObject.headline = '<?php echo $varHeadline; ?>';
  var div = document.getElementById(id).innerHTML = myObject.headline;
}

我的 Javascript 出现错误。 我希望继续使用 Javascript 对象数据填充我的 div,但由于某些包含 HTML 的数据(甚至单引号或双引号),我无法这样做。

我确实想保留我的 HTML 格式(

标签等),所以使用 htmlspecialchars 或 strip_tags 是不可能的。有没有什么方法可以在不杀死 Javascript 的情况下存储返回的 HTML? 提前致谢。 -J

【问题讨论】:

    标签: php javascript html


    【解决方案1】:

    json_encode() 字符串并去掉引号:

    myObject.headline = <?php echo json_encode($varHeadline;) ?>;
    

    当然,您可以将其重写为:

    <script language = "Javascript>
      var myObject = <?php echo json_encode(array('name'=>$valueName,'headline'=>$value_headline)); ?>;
    
            function updateDiv(id)
            {
               var div = document.getElementById(id).innerHTML = myObject.name + 
               '<br>' + myObject.headline';
            }
    </script>
    

    edit:如下面的 cmets 所述,始终确保您可以信任您放置在页面上的 HTML。如果 $valueName 或 $value_headline 来自用户输入,那么如果您不以其他方式验证 HTML,这是一个坏主意,您很容易受到 XSS 攻击等:http://en.wikipedia.org/wiki/Cross-site_scripting

    【讨论】:

    • 不要忘记清理 $varHeadline - 否则它是网站上 XSS 安全漏洞的捷径。
    • @StasM,说得好。虽然,他的具体目标是允许将任意 HTML 放在页面上,所以我假设他只是引用他自己的 HTML。我会补充的。
    • 确实 html 来自我自己的来源。非常感谢您的回复。
    【解决方案2】:

    当您“引用”被拖放到页面中的服务器端值时,当上下文是 Javascript 代码而不是 HTML 时,引用必须不同。当然,对于 HTML,您可以将 & 符号转换为“&”,将小于号转换为“是的问题是引号和超出良好 ol' 7 位 ASCII 范围的字符。 (这是一个概括,但你明白我的意思。)

    我不了解 PHP,但似乎必须有某种方法告诉它不要执行适用于 HTML/XML 的引用,而是做一些事情来保护 Javascript 字符串常量中的特殊字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多