繁体   English   中英

PHP的回声Codeigniter到JavaScript数组

[英]php echo codeigniter into javascript array

我在codeigniter视图中有以下代码:

<script>
    var content = [];
    content[<?php echo $storageItem["id"]; ?>] = "<?php echo form_open("/account/edititem", array("class" => "form-inline"), array("id" => $storageItem["id"], "item_loc" => "inventory", "acctid" => $acct_data->account_id)); ?>
            <div class="panel-body">
                <div class="row">
                    <div class="col-xs-2">
                        <strong>Refine level:</strong>&nbsp;<input type="number" name="refine" class="form-control" value="<?php echo $storageItem["refine"]; ?>" <?php if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "readonly"; } ?> />
                    </div>
                    <div class="col-xs-2">
                        <strong>Broken?:</strong>&nbsp;<input type="checkbox" name="attribute" class="form-control" value="1" <?php if ($storageItem["attribute"] == 1) { echo "checked"; } if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "disabled"; } ?> />
                    </div>
                    <div class="col-xs-2">
                        <strong>Bound?:</strong>&nbsp;<input type="checkbox" name="bound" class="form-control" value="1" <?php if ($storageItem["bound"] == 1) { echo "checked"; } ?> />
                    </div>
                </div>
                <br />
                <div class="row">
                    <div class="col-xs-2">
                        <strong>Card 1:</strong>&nbsp;<input type="number" name="card0" class="form-control" value="<?php echo $storageItem["card0"]; ?>" <?php if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "readonly"; } ?> /></br>
                    </div>
                    <div class="col-xs-2">
                        <strong>Card 2:</strong>&nbsp;<input type="number" name="card1" class="form-control" value="<?php echo $storageItem["card1"]; ?>" <?php if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "readonly"; } ?> /></br>
                    </div>
                    <div class="col-xs-2">
                        <strong>Card 3:</strong>&nbsp;<input type="number" name="card2" class="form-control" value="<?php echo $storageItem["card2"]; ?>" <?php if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "readonly"; } ?> /></br>
                    </div>
                    <div class="col-xs-2">
                        <strong>Card 4:</strong>&nbsp;<input type="number" name="card3" class="form-control" value="<?php echo $storageItem["card3"]; ?>" <?php if ($storageItem["type"] != 4 && $storageItem["type"] != 5) { echo "readonly"; } ?> /></br>
                    </div>
                </div>
            <?php echo form_close(); ?>
        </div>";
</script>

我在javascript中创建了一个名为“内容”的数组,然后需要将几乎整个表单塞进其中,以便能够在DataTables中创建子行。

(有关我一直在尝试做的事情以及这些变量来自何处的更多信息,请参阅带有来自Codeigniter的PHP数据的Datatables子行

我尝试转义单引号和双引号(PHP对此表示抱怨), json_encode (PHP也对此进行抱怨,因为我仍然需要引号,而PHP将引号解释为json_encode的结尾),我尝试将整个值都包含json_encode'"'"'"组成的javascript数组,我也尝试用' '+包围每一行,但也没有成功。如何将整个字符串转换成javascript和PHP可以正确解析它的形式,他们吓坏了吗?

看你在做什么:

<script>
    var content = [];
    content[<?php [..snip..] ?>] = "<?php [..snip..] ?>
                                   ^---start of javascript string
            <div class="panel-body">  
                       ^---end of javascript string
                                  ^---start of another string

这意味着您实质上具有:

variable = "some string stuff"variable-variable"more string stuff"

这是完全非法的JS。

特定的解决方法是对HTML中的所有字符串进行ESCAPE处理

<script>
    yadayada
    <div class=\"panel-body\"> yada yadayada
               ^-----------^

但这并不能解决这是非常糟糕的代码的事实。 您不应该将大量的html转储到JS字符串中,也永远不要直接将PHP中的文本回显到JS上下文中。

如果没有别的,为什么不在PHP中生成所有内容,然后将其全部转储为json?

<?php

$data = "blah blah blah blah";

?>

<script>
var content = <?php echo json_encode($data); ?>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM