【发布时间】:2017-07-25 22:39:28
【问题描述】:
Symfony Yaml 组件中是否存在错误,或者这是 Yaml 标准的预期行为?根据我的理解,以下场景中的逗号应该是常规内容字符。
\Symfony\Component\Yaml\Yaml::parse("test: 1,2");
实际结果:
array("test" => 12)
预期结果:
array("test" => "1,2")
【问题讨论】:
Symfony Yaml 组件中是否存在错误,或者这是 Yaml 标准的预期行为?根据我的理解,以下场景中的逗号应该是常规内容字符。
\Symfony\Component\Yaml\Yaml::parse("test: 1,2");
实际结果:
array("test" => 12)
预期结果:
array("test" => "1,2")
【问题讨论】:
这不是 Symfony 中的错误——或者至少,它是 Symfony 的预期行为。您将未引用的值传递给看起来像数字的解析器,因此它会将其视为数字并去除非数字字符。 Symfony 文档 talks about numeric literals 在其 Yaml component 中,尽管这是关于下划线的。 Symfony Yaml Format 文档明确指出:
最后,还有其他情况下必须引用字符串,无论您使用的是单引号还是双引号:
- 当字符串看起来像一个数字时,例如整数(例如 2、14 等)、浮点数(例如 2.6、14.9)和指数数字(例如 12e7 等)(否则将被视为数值);
如果您运行以下代码,您将获得预期的结果:
Symfony\Component\Yaml\Yaml::parse('test: "1,2"');
结果:
["test" => "1,2"]
注意双引号如何指示不应被视为数字文字的字符串值。
【讨论】:
Yaml::parse() 命令双向运行代码。我使用了 OP 的代码以及我发布的代码,并得到了我发布的结果。我更新了我的答案,使文字更清晰。