1

我正在尝试在 javascript 变量 (foo) 中获取自定义通道字段 (chan_body) 的内容。我已经在我的 config.php 文件中设置了
$config['protect_javascript'] = "n"; 我有我的 chan_body 'Type' => 'TextArea''Default Text Formatting => 'None'问题是这个通道字段实际上是几行长,实际上是另一种语言的代码(这并不意味着要执行),但它并没有被转义,只是被扔在那里搞砸了 javascript。我怎样才能解决这个问题?我尝试了没有帮助的 escape()

{exp:channel:entries channel="mychannel" category="2"} 
    <script type="text/javascript">
        var foo = "{chan_body}";
        alert(foo);
    </script>    
{/exp:channel:entries}

翻译成

<script type="text/javascript">
    var foo = "my $testing = "myfile.txt";
    Uncaught SyntaxError: Unexpected identifier
    open(FILE,"$myfile ") or die;
    # this is a comment
    alert(foo);
</script>    
4

3 回答 3

2

分配给 foo 时,您可以使用 base64 编码对 chain_body 中的值进行编码,并且您可以在需要使用它的地方对其进行解码。

例如

var foo = BASE64_ENCODE("{chan_body}");

你可以在这里看到 base64 的东西在 javascript 中是如何工作的。 如何在 JavaScript 中将字符串编码为 Base64?

于 2012-09-11T12:55:02.110 回答
1

JavaScript 不太适合多行字符串。请参阅如何创建多行字符串。要将其直接注入到所写的变量中,您需要\在新行的末尾使用反斜杠,并且还要转义任何双引号。

但谁愿意这样做?

一种迂回的方法可能是将字段的内容放在divwith中display:none并以这种方式访问​​它。

{exp:channel:entries channel="mychannel" category="2"} 
  <div id="entry-{entry_id}" style="display:none;">{chan_body}</div>

  <script>
    var foo = document.getElementById('entry-{entry_id}').innerHTML;
    alert(foo);
  </script>    
{/exp:channel:entries}
于 2012-09-11T03:53:26.150 回答
0

$testing 后缺少报价

var foo = "my $testing" = "myfile.txt";
于 2012-09-10T23:33:33.477 回答