-
Notifications
You must be signed in to change notification settings - Fork 11
/
escape.go
77 lines (68 loc) · 1.12 KB
/
escape.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package clickhouse
// Escape escapes special symbols
func Escape(line string) string {
result := ""
length := len(line)
for i := 0; i < length; i++ {
char := line[i : i+1]
switch char {
case "\b":
result += "\\b"
case "\f":
result += "\\f"
case "\r":
result += "\\r"
case "\n":
result += "\\n"
case "\t":
result += "\\t"
case `'`:
result += `\'`
case `\`:
result += `\\`
case `/`:
result += `\/`
case `-`:
result += `\-`
default:
result += string(char)
}
}
return result
}
// Unescape undoes escaping of special symbols
func Unescape(line string) string {
result := ""
length := len(line)
for i := 0; i < length; i += 2 {
if i >= length-1 {
result += line[i : i+1]
break
}
pair := line[i : i+2]
switch pair {
case "\\b":
result += "\b"
case "\\f":
result += "\f"
case "\\r":
result += "\r"
case "\\n":
result += "\n"
case "\\t":
result += "\t"
case `\'`:
result += `'`
case `\\`:
result += `\`
case `\/`:
result += `/`
case `\-`:
result += `-`
default:
result += line[i : i+1]
i--
}
}
return result
}