CakePHP:在用逗号分隔的内爆函数中转义单引号

时间:2017-06-12 22:54:33

标签: php jquery cakephp

我的控制器中有一个例程,它从单个数据库列中检索值并从中构建一个带引号的数组:

$suppliers=$this->Model->find('list',array('fields'=>array('Model.supplier', 'Model.supplier')));
$strSuppliers="'".implode("','", $suppliers)."'";
$this->set('suppliers', $strSuppliers);

$ strSuppliers然后被送到jQuery脚本,该脚本在我的编辑视图的“供应商”字段中创建一个自动完成下拉列表:

<script>
  $(function() {
    var availableTags = [<?php echo $suppliers ?>]; 
    $( "#MsrSupplier" ).autocomplete({
    source: availableTags
   });
 });
</script>

变量的输出类似于“汤姆”,“迪克”,“哈利”等。

这样可以正常工作,除非任何检索到的值包含单引号。 '汤姆','迪克','哈利'打破阵列,我很难理解如何逃避单引号,以便我的下拉列表在他们出现时继续运行。我已经尝试更改分隔符并交换双引号的单引号,如下所示:

$strSuppliers='"'.implode("','", $suppliers).'"';

但那没用。我还能在这里尝试什么?

1 个答案:

答案 0 :(得分:2)

查看json_encode()以获取PHP输出JSON字符串,然后查看JSON.parse()以便在jQuery中使用。

不使用implode()生成字符串,而是使用json_encode(),然后JSON.parse()解码,以便在您需要的任何应用程序中使用。

修改:为了清晰起见,添加了一些代码:

$strSuppliers = json_encode($suppliers);

然后在你的jQuery中:

var jsonStr = '<?php echo $suppliers; ?>';
var availableTags = JSON.parse(jsonStr);

编辑2:正如ndm在评论中指出的那样,您可以通过直接将Javascript变量分配给json_encode()的输出来更干净地执行此操作:

var availableTags = <?php echo $suppliers; ?>;