【问题标题】:firefox complaining about valid json... invisible invalid character?Firefox 抱怨有效的 json ......不可见的无效字符?
【发布时间】:2012-05-28 07:33:32
【问题描述】:

我正在编写一个 php 脚本,该脚本需要将 2D 数组作为 json 加载到 js 变量中。首先我制作数组,然后使用 json_encode 将其转换为字符串。然后我运行一点 js 让它在客户端可以访问。像这样:

$sBaseData = Filters::$sFilterBaseTypeData;
$sBaseData = str_replace('\r',' ',$sBaseData);
$sBaseData = str_replace('\n',' ',$sBaseData);
$sBaseData = str_replace('\t',' ',$sBaseData);

echo <<<HTML
    <script type="text/javascript">
        var validation_data = JSON.parse('$sBaseData');
    </script>
HTML;

Firefox 在这里抱怨一个意外字符:

var validation_data = JSON.parse('{"enumeration":{"js":"","msg":""},"date":{"js":" var parts = widget.value.split('-'); var d = new Date(parts[0],parts[1],parts[2]); PASS = (d.getDay()>=1); ","msg":"Invalid date. Please Enter a date in the format: YYYY-MM-DD"},"text":{"js":"","msg":"what did you do?"},"integer":{"js":"if (isNaN(widget.value)) { PASS = false; } else { intVal = parseInt(widget.value); PASS = (widget.value == intVal); } ","msg":"Please enter an integer value"},"decimal":{"js":"PASS = isNaN(widget.value); ","msg":"Please enter a number"},"group":{"js":"","msg":""},"dealer":{"js":"","msg":""}}')

我尝试使用http://jsonlint.com/ 找出哪个角色有问题,但它说这一切都有效且精彩。我替换了一些导致问题的字符,还有什么我应该替换的吗?

【问题讨论】:

    标签: php javascript special-characters json


    【解决方案1】:

    问题是您的字符串中有',而您使用' 来引用字符串。

    如果你的 json 字符串是有效的,你甚至不需要解析它。以下将起作用。

    echo <<<HTML
        <script type="text/javascript">
            var validation_data = {$sBaseData};
        </script>
    HTML;
    

    【讨论】:

      【解决方案2】:

      呃……

      var parts = widget.value.split('-');
      

      将它放在使用单引号的字符串中会破坏它。 Use a JSON encoder to output your JavaScript literal.

      【讨论】:

        【解决方案3】:

        您的 JSON 是有效的,但在您的 js 代码中,简单的引号关闭了解析函数的参数。

        试试这样:

        "date":{"js":" var parts = widget.value.split(\'-\');
        

        【讨论】:

        • 建议更改数据是个坏主意,除非您能确定不会轻易被替换。
        猜你喜欢
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        相关资源
        最近更新 更多