在php循环中编写javascript数组时,如何将新行转换为实际行


How convert new lines to actual when writing javascript array within php loop

我有一段代码,它在PHP代码(从mysql数据库检索)中写入一个JS对象数组,如下所示:

echo "var tab = ['n";
while($row = mysql_fetch_row($resultat)){
$numero = $row[0];
$notes = $row[1];
echo "{'n";
echo "numero:'"".$numero."'",";
echo "notes:'"".$notes."'" ";
echo "'n},";
}
echo "'n]";

(我简化了代码的目的……在实际代码中,最后一个逗号被删除了)

问题是:如果我在$notes中有新行,它会停止JS数组并生成JS解析错误,因为新行在JS代码中被写为真正的新行,而不是应该的"''n"。

例如,文本

"foo bar
foo bar"

应该写在JS数组中:

"foo bar'nfoo bar".

我所要做的就是用"''n"代替实际的新行。

我试过这个:

$notes = str_replace("'n", ''n', $row[1]);

但没有成功。知道吗?

将PHP数组转换为JSON的最佳方法是使用json_encode函数:

$rows = [];
while ($row = mysql_fetch_assoc($resultat)) {
    $rows[] = $row;
}
echo json_encode($rows);

我不记得是否有更简单的方法可以通过旧的mysql函数获得整个结果集。我建议您使用PDO而不是mysql_querymysql_fetch_row等:http://www.php.net/manual/en/book.pdo.php

编辑:

如果您想将JSON对象分配给一个变量,例如在<script>块内,请执行以下操作:

<script>
var myArray = <?= json_encode($rows) ?>;
</script>

我相信,如果您在php中转义出斜杠,这将起作用,如下所示:''n

我还没有测试过这个,但如果我没记错的话,这个应该会起作用。

但是,如果你想做的只是在HTML页面上显示文本,为什么不使用<br />标记来代替'n呢?这会给你一个真正的中断,'n只会在你的代码中开始一行新行,但只会在浏览器中显示为一个空格。