0

我试图弄清楚如何$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 引号。

4

2 回答 2

2

你可以试试这个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>
于 2013-01-15T10:52:11.950 回答
0

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

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

于 2019-01-02T20:08:25.173 回答