2013-01-15 12 views
0

我的錯誤:沒關係,我是個白癡。我正在查看瀏覽器中的代碼,當我以字符串的形式輸出它時,它顯示爲單引號,瀏覽器僅在視圖源中顯示雙引號。使用PHP的setAttribute將JSON放入HTML屬性,雙引號問題

我想弄清楚如何讓$obj->setAttribute()設置屬性時使用單引號,以便我可以放置一個JSON數組。

這是我想要完成的基礎知識。

$code = '<img src="http://mysite.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://mysite.com/image.jpg&quot;&gt;","string":"some string"}"> 

這是一個問題,因爲該屬性需要使用單引號,因此它不會干擾JSON的雙引號。 JSON包含HTML轉換爲特殊字符的事實進一步複雜化。因此,如果我要將JSON轉換爲特殊字符,那麼當我嘗試解碼它時,'代碼'也將被解碼,這會在嘗試使用JavaScript獲取時導致各種問題。

有誰知道一種乾淨的方式,我可以將周圍的'data-stuff'屬性的容器標籤轉換爲單個字符嗎?我更喜歡這個選項而不是轉義json引號。

任何幫助表示讚賞,謝謝。

回答

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> 
+0

這就是我已經做了,我也沒有發佈完整的標記。然而,根據我的瀏覽器,它顯示雙引號而不是單引號。 – Ian

+0

我甚至沒有使用瀏覽器進行測試。確保你看到了實際的腳本輸出(而不是,例如,如Firebug的「HTML」面​​板中所示)。 –

+0

是的,就在一分鐘前,我只是一個白癡。這只是瀏覽器使它看起來好像是雙引號。我浪費了一天中的好時光。謝啦。 – Ian