php - json_encode 不会转义换行符

标签 php javascript yii json

首先,我在 Stack Overflow 上搜索了答案,但没有找到有效的解决方案。

我正在使用 MVC 框架 (yii) 生成一些 View 并将它们放入数组中。每个 View 都是一张牌,我有一个牌数组($deck)以及一个牌数组数组($hands,每个玩家的手牌列表)。我只是想在前端设置一个 javascript 变量来存储在 PHP 中创建的手。值得注意的是,我的观点有多条线。事实上,我当前的测试 View 仅包含:

test
test

因此我使用了 json_encode,但是当我使用 $.parseJSON() 时,它给了我以下错误:

Uncaught SyntaxError: Unexpected token t

我在其他地方读到需要(无论出于何种原因)使用 json_encode 两次。我已经尝试过了,但没有帮助。

使用单个 json_encode,回显 $hands 的输出(后跟退出)看起来非常健康:

[["test\ntest","test\ntest","test\ntest","test\ntest", etc...

但是当我不退出时,每次都会出现语法错误。

编辑:这是我的代码示例。请注意,$cards 通常是一个 HTML 数组,但在我的简化情况下仍然会出现错误,仅包含上面提到的两行“test”。

    $deck = array();
    foreach ($cards as $card) {
        $deck[] = $this->renderPartial('/gamePieces/cardTest', 
                array('card'=>$card), true);
    }
    $hands = Cards::handOutCards($deck, $numCards , $numPlayers);
    $hands = json_encode($hands);

    echo $hands; exit;

使用 JavaScript,我正在执行以下操作:

var hands = $.parseJSON('<?php echo json_encode($hands); ?>');

页面加载时出错。

如有任何帮助,我们将不胜感激!

谢谢

ParagonRG

最佳答案

var hands = $.parseJSON('<?php echo json_encode($hands); ?>');

这将导致类似的结果:

var hands = $.parseJSON('{"foobar":"baz'"}');

如果编码字符串中存在 ' 字符,则会破坏 Javascript 语法。由于您直接将 JSON 输出到 Javacript 中,因此只需执行以下操作:

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

JSON 是语法上有效的 Javascript。例如,如果您通过 AJAX 将其作为字符串接收,则只需对其进行解析或eval 即可。如果您直接生成 Javascript 源代码,只需直接嵌入即可。

关于php - json_encode 不会转义换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981407/

相关文章:

php - 使用哈希值更新数据库中的所有行

javascript - 顺序调用javascript代码的替代方法,中间有延迟

javascript - 从 XHR 获取响应 Content-Type header

yii - 如何使用jquery-datepicker作为日期范围

javascript - 重定向并滚动到特定内容

php - Yii模型()方法findBySQL( 'SELECT MAX(id) FROM ee_car_types;');

php 获取今天明天和后天但忽略周末

php - 如何防止 PHP 中的 SQL 注入(inject)?

javascript - 使用 jQuery 选择器遍历 XMLDocument

php - session_set_cookie_params() 函数的 "secure"参数意味着什么?