String header = "EXL=TST+[Placeholder1]+[Placeholder2]+[Placeholder3]:[Placeholder2]"
header = header.replaceAll("\\[Placeholder1\\]", escapeEdi((String)${propertyVal1}))
header = header.replaceAll("\\[Placeholder2\\]", escapeEdi((String)${propertyVal2}))
header = header.replaceAll("\\[Placeholder3\\]", escapeEdi((String)${propertyVal3}))
println(header)
String escapeEdi(String target){
StringBuilder result = new StringBuilder();
for(char c : target.toCharArray()){
switch(c){
case '+':
case ':':
case '\'':
case '?':
result.append("?");
default:
result.append(c);
}
}
return result.toString();
}
使用上面的示例代码,我得到了有效负载结果,其中包含很多问号:
示例有效负载:
EXL=TST+1+?1234?+1234+123?:123?+?1-1-170101?++?TEST?'
即使删除escapeEdi函数也会得到完全相同的结果。我甚至不确定是否需要转义edi,坦率地说,没有通过的任何值都有这样的字符,纯粹是字母数字。
由于?,它导致消息与UTF-8-BOM一起发送,并且它们的结尾不是为了处理它而设计的,这意味着它必须在我的末尾被清除和删除。我该怎样摆脱所有这些?
带有空字符串的简单replaceAll不起作用。 尝试在结果的末尾escapeEdi()也没有做任何事情,我有一个非常相似的脚本,它工作得很好,包括没有愚蠢的字符。可能导致此问题的原因是什么?
答案 0 :(得分:1)
有趣的事情)
以下代码
String header = "EXL=TST+[Placeholder1]+xxx"
header = header.replaceAll("\\[Placeholder1\\]", "val1")
println header
产生
EXL=TST+?val1?+xxx
最后我发现你的源代码字段[]
之前和之后有一个奇怪的空格,带有uni-code value(8203)
,它是Unicode Character 'ZERO WIDTH SPACE' (U+200B)
请参见绿色屏幕截图: