apollo icon indicating copy to clipboard operation
apollo copied to clipboard

末尾空格

Open AdamsShen opened this issue 6 years ago • 19 comments

apollo配置项如何让末尾空格起作用? 如"abc空格空格",读取出来后仍然是原样,而不是只剩下"abc"字符串了

AdamsShen avatar Jan 17 '19 02:01 AdamsShen

@AdamsShen 怎么会有这种使用场景? 能举个例子吗

kezhenxu94 avatar Jan 17 '19 02:01 kezhenxu94

项目里面需要做一个字符串分隔符操作, 现在设置的分隔符为", "(逗号空格空格),为了方便更换,所以配置在apollo配置项中,但是现在无法设置,只能在程序中写死

AdamsShen avatar Jan 17 '19 02:01 AdamsShen

@AdamsShen 如果是 Java 的 String#split 方法话, 配置 ,\\s\\s 是不是就可以了? 该方法参数是支持正则表达式的

kezhenxu94 avatar Jan 17 '19 02:01 kezhenxu94

是Java 使用的是repalceAll方法, 第二个参数是我要使用的分隔符,第二个参数不支持正则表达式,如将字符串"a;b;c"中的所有";"替换为分隔符("逗号空格空格"),而目前是分隔符配置在apollo配置中,所以存在上述问题

AdamsShen avatar Jan 17 '19 02:01 AdamsShen

感觉这设计有点奇怪,你怎么看 @nobodyiam

kezhenxu94 avatar Jan 17 '19 04:01 kezhenxu94

看了一下是前端发起请求到后端时就trim掉了,@lepdou 还记得为啥会trim吗?

nobodyiam avatar Jan 17 '19 04:01 nobodyiam

@kezhenxu94 @nobodyiam 配置的时候key=value的形式, key或者value前后有空格 你们都会做trim处理,其实没有问题,我现在有个建议,如果配置的value最后字符或者去掉空格后第一个字符为'\'(转义符号),获取得到值时就去掉该'\'保留剩下的值,如何需要值中有\,我们可以使用'\\'来转义代替, 你们觉得可行吗? 希望给点意见 并解决这个问题!谢谢!

AdamsShen avatar Jan 17 '19 04:01 AdamsShen

这个规则看上去有点定制了,等于是让apollo制定了一个特殊的规则:输入\<whitespace>,保存<whitespace>,对配置中心而言,应该还是要尽可能的保持理解简单

nobodyiam avatar Jan 18 '19 04:01 nobodyiam

@nobodyiam 那您觉得这是个问题吗? 如果是 应该怎么解决呢? 我们项目其实是有很多其他的方案解决这个问题,比如加密下或者用其他字符替代空格,然后读取出来再解密或者替代回来等等,但是总觉得都不太合理,不是解决问题的最优方案,所以还是希望从apollo的配置上根本解决这个问题,所以希望您这边能有一个好的解决方案,谢谢

AdamsShen avatar Jan 18 '19 04:01 AdamsShen

页面上保存的时候加一个选项,是否保留尾空格?

nobodyiam avatar Jan 18 '19 11:01 nobodyiam

@nobodyiam 我觉得这样也可以呀 但是如果想要保留value前面的空格呢?怎么处理呢?

AdamsShen avatar Jan 21 '19 01:01 AdamsShen

应该是一样的吧,比如加个选项 - 是否启动去除多余空格,默认是勾上之类的?

nobodyiam avatar Jan 22 '19 05:01 nobodyiam

像spring-boot 一样 约定双引号或单引号的情况下保留原串,如何?

heobo avatar Mar 04 '19 06:03 heobo

@heobo 目前apollo的做法是原样返回,所以加了双引号,空格肯定是保留了,不过双引号也会保留

nobodyiam avatar Mar 05 '19 15:03 nobodyiam

请问这个空格问题有解决方案了吗?目前apollo会trim掉key和value前后空格,中间的空格不会trim,但是现实场景中,确实有key或value前后需要空格的变态做法,之前宋哥建议增加是否保存空格的建议实现了吗?

DeanJi avatar Mar 15 '19 07:03 DeanJi

@heobo 目前apollo的做法是原样返回,所以加了双引号,空格肯定是保留了,不过双引号也会保留

目前apollo 的做法并没有原样返回,而是删除了后面的空格。

heobo avatar Mar 16 '19 04:03 heobo

建议有引号的时候对引号里面的内容原样返回,如果配置内容也需要引号,可以用单、双引号的配合实现,复杂的情况用转义字符。

比如 bash

export a=b  #`b`
export a='hello "world" '  #`hello "world" `
export json='{"a":123,"b":"\""}' #`{"a":123,"b":"\""}`
export json="{\"a\":123,\"b\":\"\\\"\"}" #`{"a":123,"b":"\""}`

heobo avatar Mar 16 '19 04:03 heobo

这个考虑在编辑时增加一个选项来控制是否自动去掉末尾空格吧

nobodyiam avatar Mar 16 '19 13:03 nobodyiam

@nobodyiam 这个有计划支持么, heobo的建议挺好的. 支持用双引号.

key = "  value  "
"  key  " = "  value  "

czd890 avatar Jan 06 '23 02:01 czd890