2016-08-19 61 views
3

我有一個包含字符串作爲值的php關聯數組,我將它編碼爲JSON並將其存儲在html數據屬性中。這是由一些JS讀取的。將PHP的json_encode()總是使用雙引號作爲字符串分隔符?

到目前爲止這麼好。

現在,我需要使用單引號的數據屬性,否則上下文切換。

<section id="settings" data-settings='{"some":"val"}'> 
</section> 

的問題是,我可以依靠PHP與雙引號總是編碼字符串的json_encode()功能?令人驚訝的是,我似乎無法找到關於此的信息。我只能從數組值中找到引用問題的人的文章。

在此先感謝。

+2

根據[ECMA 404 JSON標準](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf),是的,它將始終使用雙引號(請參閱圖5) –

+1

是的,但字符串本身的單引號會導致問題 – Steve

+2

_「現在,我需要爲數據屬性使用單引號,否則上下文會切換」_ - 否,您只需要在數據處理之前正確處理數據你把它放到HTML上下文中。 'htmlspecialchars' – CBroe

回答

4

是,作爲JSON規範定義的,分隔符將始終爲"。但是,值可能包含'個字符,這會破壞您的HTML。爲了保持簡單,不用擔心什麼可能會或可能不會構成問題,HTML轉義您的價值觀!

<section data-settings="<?= htmlspecialchars(json_encode($foo)); ?>"></section> 

無論您輸入什麼值或如何對它們進行編碼,這都可以保證正常工作。請注意,htmlspecialchars默認只會編碼",而不是';因此您必須使用"作爲HTML中的分隔符(或更改默認轉義行爲)。

+1

謝謝,這非常有幫助。 – agoldev

0

在許多語言中,雙引號只是JSON中的約定 - 標準。所以如果你想用雙引號在HTML屬性中存儲JSON。您可以編碼

在PHP

$encoded_json = base64_encode(json_encode($var)); 

在HTML

<section id="settings" data-settings='<?=$encoded_json?>'> 

在JS

var variable = JSON.parse(atob(encoded_json)); 
相關問題