1

JavaScript 変数 (foo) 内のカスタム チャネル フィールド (chan_body) の内容を取得しようとしています。config.php ファイルに既に設定しています
$config['protect_javascript'] = "n"; 私は chan_body 'Type' => 'TextArea' with 'Default Text Formatting => 'None'を持っています 問題は、このチャネルフィールドが実際には数行の長さであり、実際には別の言語のコードであることです (これは実行されることを意図していません) )、しかし、エスケープされておらず、そこにダンプされてjavascriptを台無しにしているだけです。どうすればこれを修正できますか? 助けにならなかったエスケープ()を試しました

{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 に答える