Skip to content

fix: 修复 Clash YAML 输出字段名和引号问题#287

Open
15515151 wants to merge 10 commits intoimzyb:mainfrom
15515151:main
Open

fix: 修复 Clash YAML 输出字段名和引号问题#287
15515151 wants to merge 10 commits intoimzyb:mainfrom
15515151:main

Conversation

@15515151
Copy link
Contributor

@15515151 15515151 commented Mar 14, 2026

问题描述

内置 Clash 生成器输出的 YAML 配置存在以下三个问题:

1. servername 字段被错误输出为 sni

url-to-clash.js 中 VLESS、Trojan、Hysteria2、TUIC 协议解析器将 SNI 参数存储为 proxy.sni,但 Clash/Mihomo 配置标准字段为 servername(VMess 解析器已正确使用 servername,其余四个协议不一致)。

# 修复前
sni: www.icloud.com

# 修复后
servername: www.icloud.com

2. name 字段引号丢失

builtin-clash-generator.jsjs-yamlforceQuotes 设为 false,导致含有 emoji 等特殊字符的节点名称在序列化时丢失引号,可能造成部分客户端解析异常。

# 修复前
- name: 🇺🇸 US CN2优化

# 修复后
- name: "🇺🇸 US CN2优化"

3. 复制订阅链接的 Clash 模式经过 subconverter 导致参数丢失

CopyLinkModal.vue 中 Clash 格式的链接参数为 ?clash,会经过外部 subconverter 后端转换。subconverter 不支持 reality-opts(含 spider-x)、dialer-proxy 等特殊参数,导致这些参数在转换过程中被丢弃。而 useProfiles.js 中的 copyClashLink 已经正确使用了 ?target=clash&builtin=1,两者不一致。


修改内容

functions/utils/url-to-clash.js

将以下四个协议解析函数中的 proxy.sni 统一改为 proxy.servername

函数 变更
parseVlessUrl proxy.sniproxy.servername
parseTrojanUrl proxy.sniproxy.servername
parseHysteria2Url proxy.sniproxy.servername
parseTuicUrl proxy.sniproxy.servername

兼容性说明:所有下游用户(builtin-surge-generator.jsnode-parser.jssrc/utils/protocols/converters/*)均已使用 proxy.servername || proxy.sni 的回退逻辑读取该字段,因此本次修改理论上不会破坏任何下游功能。

functions/modules/subscription/builtin-clash-generator.js

 let yamlStr = yaml.dump(config, {
     indent: 2,
     lineWidth: -1,
     noRefs: true,
     quotingType: '"',
-    forceQuotes: false
+    forceQuotes: true
 });

src/components/modals/CopyLinkModal.vue

-{ name: 'Clash', format: '?clash' },
+{ name: 'Clash', format: '?target=clash&builtin=1' },

与 useProfiles.js 中的 copyClashLink 保持一致,走内置 Clash 生成器路径。


影响范围

  • ✅ 内置 Clash 生成器输出的 YAML 格式
  • ✅ 前端「复制订阅链接」弹窗中 Clash 格式的 URL
  • ⬜ 不影响 subconverter 转换路径
  • ⬜ 不影响 Surge / Base64 / Sing-Box 等其他格式输出

#269 新版本解析后无法使用节点

github-actions bot and others added 10 commits March 9, 2026 19:37
- url-to-clash.js: VLESS/Trojan/Hysteria2/TUIC 解析器输出字段从 sni 改为 servername,符合 Clash/Mihomo 标准
- builtin-clash-generator.js: js-yaml forceQuotes 改为 true,修复 emoji 名称引号丢失
- CopyLinkModal.vue: Clash 复制链接改为 ?target=clash&builtin=1,使用内置生成器保留 reality-opts 等参数
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant