【问题标题】:Putting JSON into HTML attribute using PHP's setAttribute, double quote issue使用 PHP 的 setAttribute 将 JSON 放入 HTML 属性,双引号问题
【发布时间】:2013-01-15 10:45:08
【问题描述】:

我正在想办法让$obj->setAttribute()在设置属性时使用单引号,这样我就可以在里面放置一个JSON数组。

这是我想要完成的基本任务。

$code = '<img src="http://example.com/image.jpg">';

$array = array(
  'code' => htmlspecialchars($code),
  'string' => $string
);

$tag->setAttribute('data-stuff', json_encode($array));

现在一切都很好,但是 JSON 使用双引号,并且新标签也使用双引号。

<tag data-stuff="{"code":"&lt;img src=&quot;http://example.com/image.jpg&quot;&gt;","string":"some string"}">

这是一个问题,因为该属性需要使用单引号,因此它不会干扰 JSON 的双引号。由于 JSON 包含转换为特殊字符的 HTML,这一事实更加复杂。因此,如果我要将 JSON 转换为特殊字符,那么当我尝试对其进行解码时,“代码”也会被解码,这在尝试使用 JavaScript 抓取它时可能会导致各种问题。

有谁知道我可以将周围的“data-stuff”属性的容器标签转换为单个字符的干净方法?我更喜欢这个选项而不是转义 json 引号。

【问题讨论】:

    标签: php json dom quotes setattribute


    【解决方案1】:

    你可以试试saveHTML()方法:

    <?php
    
    $code = '<img src="http://mysite.com/image.jpg">';
    $array = array(
      'code' => htmlspecialchars($code),
      'string' => 'some string',
    );
    
    $doc = new DomDocument;
    $tag = $doc->createElement("tag");
    $tag->setAttribute('data-stuff', json_encode($array));
    echo $doc->saveHTML($tag);
    

    ... 产生:

    <tag data-stuff='{"code":"&amp;lt;img src=&amp;quot;http:\/\/mysite.com\/image.jpg&amp;quot;&amp;gt;","string":"some string"}'></tag>
    

    【讨论】:

    • 我已经这样做了,我没有发布完整的标记。但是根据我的浏览器,它显示的是双引号而不是单引号。
    • 我什至没有使用浏览器进行测试。确保您看到的是实际脚本的输出(而不是,例如,如 Firebug 的“HTML”面​​板中所示)。
    • 是的,我一分钟前就这样做了,我只是个白痴。只是浏览器使它看起来好像是双引号。我一天中的好时光被浪费了。谢谢大佬。
    【解决方案2】:

    (代表问题作者发布答案)。

    没关系,我已经修好了。我在浏览器中查看代码,当我将它作为字符串输出时,它显示为单引号,浏览器只是在视图源中显示双引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多