【问题标题】:Symfony YAML parsing content with commaSymfony YAML 用逗号解析内容
【发布时间】:2017-07-25 22:39:28
【问题描述】:

Symfony Yaml 组件中是否存在错误,或者这是 Yaml 标准的预期行为?根据我的理解,以下场景中的逗号应该是常规内容字符。

\Symfony\Component\Yaml\Yaml::parse("test: 1,2");

实际结果:

array("test" => 12)

预期结果:

array("test" => "1,2")

【问题讨论】:

    标签: php symfony yaml


    【解决方案1】:

    这不是 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"]
    

    注意双引号如何指示不应被视为数字文字的字符串值。

    【讨论】:

    • 是的。我直接使用 Symfony 的 Yaml::parse() 命令双向运行代码。我使用了 OP 的代码以及我发布的代码,并得到了我发布的结果。我更新了我的答案,使文字更清晰。
    • 在 Symfony Yaml 2.8 中,您可以跟踪代码到内联类中的 evaluateScalar 方法,该方法正在删除逗号并将字符串类型转换为 float "(float) str_replace(',', '', $标量);"因为第一个字符是数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2021-06-06
    相关资源
    最近更新 更多