firefox抱怨有效的json ...隐形无效字符?

时间:2012-05-28 07:33:33

标签: php javascript special-characters json

我正在编写一个php脚本,需要将一个二维数组作为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/来找出哪个角色有问题,但它说这一切都是有效且精彩的。我替换了一些导致问题的字符,还有什么我应该替换的吗?

3 个答案:

答案 0 :(得分:0)

嗯...

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

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

答案 1 :(得分:0)

问题是当您使用'引用字符串时,字符串中有'

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

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

答案 2 :(得分:0)

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

试试这样:

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