2010-06-29 74 views
2

我需要能夠生成無限數量的數據集,所以我想要做的就是這樣的事情;將JSON存儲在隱藏的輸入元素中?

<input type="hidden" name="items[]" value="{id:1,name:'some-name'}" /> 

我試圖JSON.stringify我的數組轉換在JavaScript中,並將其存儲在當前隱藏輸入元素,但它封裝了所有在雙引號鍵和值,這顯然與HTML在環繞整個價值衝突雙引號。不知怎的,我需要逃避引號,但我需要這兩種方式工作......基本上這些元素是用PHP生成的,並按順序放置在頁面中,然後我可以在用戶端添加或刪除項目並提交頁面,這應該讓PHP遍歷這些隱藏的元素並更新記錄。

任何人有任何關於某種逃避方法的建議?

回答

5

可以使用避開功能這裏介紹:http://phpjs.org/functions/htmlspecialchars:426

應該逃避JSON字符,讓你的字符串安全的,因爲HTML屬性的值來使用。

如果您想要在PHP上進行轉義,那麼您應該使用PHP中構建的函數()。

+0

這正是我需要的!我在PHP中嘗試使用addslashes()方向的錯誤方向,但它們不能在HTML中轉義引號。 :( – 2010-06-29 23:03:41

+0

謝謝。當你使用htmlspecialchars()引用你從php發出的html文件時,你是最安全的XSS攻擊。 – 2010-06-29 23:12:52

1

BASE64_ENCODE數據或通過ヶ輛運行它()打開引號中的實體:)

2

你想要做的是抓住一些HTML5數據 - *相關attrubites所以你可以國防部

<div id="post-container" data-meta="{id:22,name:'Robert Pitt'}"> 
    .. 
</div> 

然後你可以使用htmlentites()來使字符串安全和使用JavaScript,您可以用JavaScript獲取數據,像這樣:

function ElementJson(id,attrib) 
{ 
    var post_c = document.getElementById(id); 

    for(var x = 0; x < post_c.attributes.length; x++) 
    { 
     if(post_c.attributes[x].nodeName.toLowerCase() == 'data-' + attrib.toLowerCase()) 
     { 
      return post_c.attributes[x].nodeValue; 
     } 
    } 
    return false; 
} 
json = ElementJson('post-container','meta'); 

通過jQuery比如,你可以做

json = $('#post-container[data-meta]').attr('data-meta'); 

很多大型網站的使用特別是Facebook的

0

說實話,如果要設置在JavaScript中值頁上,然後我是你遇到了問題有點吃驚,但這裏有一些建議: -

當然的適當要做的是HTML編碼數據的HTML屬性 - 但這需要調用ヶ輛或相似的,所以代替,爲什麼不URL編碼使用的數據「中建」 javascript encodedecode和meth消耗臭氧層物質。網址編碼應該將雙引號轉義爲'%22'。如果您已經在使用jQuery,請使用val()方法來設置(並獲取?)值 - 我相信這會爲您處理這些問題(儘管我沒有去實際檢查過這個問題)。

+0

這不是JavaScript中的設置,因爲它是放置在頁面中的問題最初通過PHP。我知道有很多方法可以處理雙引號,但不知道什麼樣的工作最好。儘管我最初並沒有想到過,但我曾經想過用addslashes,但是斜槓不要在HTML中轉義引號>>。> – 2010-06-29 23:01:44