2011-01-22 77 views
2

我已经创建了一个新的JSON字符串(通过转换使用json_encode PHP数组)并将其存储在$siteTree ...其输出到日志显示以下调用JavaScript功能

[ 
{ 
    "attr": { 
     "id": "node_1", 
     "rel": "folder" 
    }, 
    "data": "New Title", 
    "children": [ 
     { 
      "attr": { 
       "id": "node_2", 
       "rel": "folder" 
      }, 
      "data": "second document", 
      "children": [] 
     } 
    ] 
} 

]

所以我知道JSON形成正确。我所试图做的是使用该变量在JavaScript函数来创建使用JSON数据的对象......我做模板下面

<?php 
    use_helper('JavascriptBase'); 
    echo javascript_tag('createTree('.$siteTree.')'); 
?> 

显示输出页面上以下

createTree([{&quot;attr&quot;:{&quot;id&quot;:&quot;node_1&quot;,&quot;rel&quot;:&quot;folder&quot;},&quot;data&quot;:&quot;New Title&quot;,&quot;children&quot;:[{&quot;attr&quot;:{&quot;id&quot;:&quot;node_2&quot;,&quot;rel&quot;:&quot;folder&quot;},&quot;data&quot;:&quot;second document&quot;,&quot;children&quot;:[]}]}]) 

该函数被调用,但JSON已将"替换为&quote;。我怎样才能阻止呢?

感谢您的帮助!

+0

请问你能给我们看看javascript_tag()? – 2011-01-22 10:24:43

+0

它是一个内置的symfony函数 – ManseUK 2011-01-22 10:26:08

回答

0

OK ..所以我设法解决了这个问题......我是这么做的......我忘了关于json_encode,只是传递一个数组到模板的组件。

在模板我处理像这样

echo javascript_tag('createTree('.json_encode($siteTree->getRawValue()).');'); 

这则输出正确的JavaScript。

感谢各位的帮助!到底有没有

2

Symfony自动执行输出转义以帮助防止多种类型的XSS攻击。

您可以通过配置禁用它,或取决于你使用Symfony框架的什么版本,访问原始数据,您的看法是这样的:

$sf_data->getRaw('siteTree') 

例如

echo javascript_tag('createTree(' . $sf_data->getRaw('siteTree') . ')'); 

如果不为你工作,你会发现你需要咨询的Symfony文档,了解该框架的版本,搜索“输出转义”的相关引用。