使用file_get_contents()和implode()将数组传递给javascript无效

时间:2015-04-29 08:05:54

标签: javascript php

我正在开发一个显示图像和相关标题的简单图像库。 所有图像都在目录中,而另一个图像在另一个目录中(作为单个文件)。 php脚本列出两个目录中的所有文件,并在用户按下按钮时将数组传递给更改图像和标题的javascript。

            [...]    
            for($x = 2; $x < $lenght; $x++) {
                $filesi[$x] = $imgdirectory."/".$lsi[$x];
            }

            for($x = 2; $x < $lenght; $x++) {
                $filename = $capdirectory."/".$lsc[$x];
                $filesc[$x] = file_get_contents($filename);
            }

            //Create array for JS
            $captions =  '["' . implode('", "', $filesc). '"]';
            $images =  '["' . implode('", "', $filesi). '"]';
?>    
<script>
            var captions = <?php echo $captions; ?>;
            var images = <?php echo $images; ?>;
            [...]

图片工作正常,我也可以打印标题的文件名而不是标题 即。

$filesc[$x] = $filename;

但是当我使用“file_get_contents()”来读取文件时,图库就会停止工作。

如果我回显$ captes并手动设置$ caption具有相同的输出 e.g。

$captions='["first caption","second caption", "..."]';

图库正常工作,因此阵列应正确格式化......

提前谢谢

解 我正在创建一个带有两个空元素(0,1)的数组,以避免文件列表中的./和../,所以我在lsi索引中添加了+2。

for($x = 0; $x < $lenght-2; $x++) {
                $filesi[$x] = $imgdirectory."/".$lsi[$x+2];
            }

另外我按照建议使用了json_encode,而不是手动json编码。输出似乎是相同的,但现在画廊工作!

var images = <?php echo json_encode($filesi); ?>;

1 个答案:

答案 0 :(得分:0)

在JS中,你必须在这样的字符串中转义新行:

var multilineString = "this is\
just an example";

如果你不想用json_encode()更容易,可以尝试使用trim()和str_replace()。

更新

然后我错了。您是否知道可以仅使用$array[] = 'item';将项目推送到数组?