2012-07-20 156 views
4

我一直在使用json_encode如何將字符串轉換爲單引號成雙層的JSON解析

$params = array(1=>'something','2'=>'two'); 

是在PHP被編碼的陣列當我編碼使用JSON其編碼將用雙引號進行編碼這本身就很好,但我試圖將它嵌入到一個錨標記中,並且雙引號將這些屬性搞亂了。 <a class="btn ajax" data-method="test" data-params="{"one":"something","2":"two"}" href="#">test ajax link</a>

顯然在數據PARAMS屬性的第二個雙引號是打破了鏈接。

所以我所做的是將字符串轉換爲單引號,但我需要重新將其轉換爲雙引號才能在javascript中解析;

var string = {'one':'something','2':'two'} ; 

JSON.parse將在該字符串失敗,我想

var jsonString = dataParams.replace('\'', '"'); 

,但似乎只轉換第一單引號,然後停止。有任何想法嗎?

+0

添加'g'標誌。 – alex 2012-07-20 12:59:30

回答

0

使用這個代替:

var jsonString = dataParams.replace(/'/g, '"'); 
+10

如果編碼的字符串包含單引號或雙引號,則會中斷... – 2014-06-22 10:45:23

3

更好的方法是使用htmlentities() function來編碼"&quot;,這意味着你可以將它插入data-*。當您使用JavaScript檢索它時​​,它們將顯示爲",這意味着您可以立即JSON.parse;

<a data-foo="<?php echo htmlentities(json_encode(array('demo' => 'test'))); ?>">Hey</a> 
<script>alert(JSON.parse(document.getElementsByTagName("a")[0].dataset.foo).demo);</script> 
+0

這是一個更好的方法。謝謝。 – Brian 2012-07-20 13:12:35

相關問題