我使用jQuery构建一个数组,然后将其字符串化,以便通过隐藏的输入元素在PHP中保存:
var dataObject = [];
dataObject.push({
text: text
});
var dataObjectString = JSON.stringify(dataObject);
$('#data').val(dataObjectString);
在PHP中,我在保存到DB之前将其转换为Base64:
$args['data'] = isset($args['data']) ? base64_encode($args['data']) : '';
对于视图,我从Base64解码并设置字符串:
$this->set('js_data', base64_decode($this->data));
在视图中我将它放在div属性中,然后用jQuery读取它:
<div class="my_class" data-js="'<?php echo h($js_data); ?>'">
<script type="text/javascript" charset="UTF-8">
$(function(){
$.each($('.my_class[data-js]'), function(index, element){
var js_data = $(element).attr('data-js');
init(element, js_data);
});
function init(element, js_data) {
console.log(js_data);
};
});
</script>
到目前为止,我已经在控制台中打印了字符串。但那只是一个字符串。我需要一个json对象来读取我的初始数组值。所以如果我这样做
$.parseJSON($(element).attr('data-js'));
它抛出一个错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符”。为什么?我怎么能把字符串转换成json?
答案 0 :(得分:0)
是的,
的缩写h()
是htmlspecialchars()
htmlspecialchars()
将双引号转义为"
。这就足够了,将属性值括在一对额外的单引号中是错误的。
这应该有用。
<div class="my_class" data-js="<?php echo h($js_data); ?>">