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 に答える