我有一段代码,它在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_query
、mysql_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
只会在你的代码中开始一行新行,但只会在浏览器中显示为一个空格。