You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP的yaml_parse_file()函数保留空白行?

保留YAML解析后字符串中的空白行

问题场景

你在PHP 8.3中使用yaml_parse_file()读取如下YAML内容:

summary: "Apples

Apples are a delicious fruit, unless they have worms in them."

解析后通过json_encode()输出时,中间的空白行被自动移除,最终结果丢失了换行间隔:

Apples
Apples are a delicious fruit, unless they have worms in them.

解决方法

1. 修改YAML格式(最简便)

YAML的块字面量语法(用|标记)会严格保留字符串中的换行和空白行,比双引号字符串的行为更明确。把原YAML改成如下格式:

summary: |
  Apples

  Apples are a delicious fruit, unless they have worms in them.

这样yaml_parse_file()解析后,summary字段会完整保留中间的空白行,转JSON输出时也不会丢失格式。

2. 调整PHP解析选项

如果无法修改YAML文件,可尝试在调用解析函数时传入YAML_PARSE_NO_FOLD_LINE选项(需确保yaml扩展版本支持该参数):

// 传入解析选项禁止折叠换行
$parsedData = yaml_parse_file('your-file.yaml', 0, $docCount, [YAML_PARSE_NO_FOLD_LINE]);
// 转JSON并输出
file_put_contents('output.json', json_encode($parsedData));

这个选项会强制解析器保留字符串中的原始换行结构,不会自动合并或移除空白行。

3. 手动修复(兜底方案)

如果以上方法都不可行,只能在解析后手动补全空白行。示例针对特定内容的处理:

$parsedData = yaml_parse_file('your-file.yaml');
// 匹配到"Apples"后跟单行"Apples are...",插入空白行
$parsedData['summary'] = preg_replace('/^(Apples)\n(Apples are)/', '$1\n\n$2', $parsedData['summary']);
file_put_contents('output.json', json_encode($parsedData));

注意这种方法仅适用于固定格式的内容,通用性较差。

内容的提问来源于stack exchange,提问作者Patrick Kenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:46:02