fix: improve Chinese character display in HTML reports

- Fix JSON serialization to preserve Chinese characters instead of Unicode escaping
- Use SetEscapeHTML(false) in toJSON template function
- Apply safeHTML to prevent HTML entity encoding of Chinese text
- Now displays {"text":"连了又连"} instead of {"text":"连了又连"}
This commit is contained in:
lilong.129
2025-06-08 09:28:03 +08:00
parent 4053cc9985
commit 5f7698c6b4
2 changed files with 15 additions and 8 deletions

View File

@@ -1 +1 @@
v5.0.0-beta-2506080923
v5.0.0-beta-2506080929

View File

@@ -237,11 +237,18 @@ func (g *HTMLReportGenerator) GenerateReport(outputFile string) error {
"encodeImageBase64": g.encodeImageToBase64,
"getStepLogs": g.getStepLogsForTemplate,
"safeHTML": func(s string) template.HTML { return template.HTML(s) },
"toJSON": func(v interface{}) string { b, _ := json.Marshal(v); return string(b) },
"mul": func(a, b float64) float64 { return a * b },
"add": func(a, b int) int { return a + b },
"base": filepath.Base,
"index": func(m map[string]any, key string) interface{} { return m[key] },
"toJSON": func(v interface{}) string {
var buf strings.Builder
encoder := json.NewEncoder(&buf)
encoder.SetEscapeHTML(false)
_ = encoder.Encode(v)
result := buf.String()
return strings.TrimSpace(result)
},
"mul": func(a, b float64) float64 { return a * b },
"add": func(a, b int) int { return a + b },
"base": filepath.Base,
"index": func(m map[string]any, key string) interface{} { return m[key] },
}
// Parse template
@@ -1033,7 +1040,7 @@ const htmlTemplate = `<!DOCTYPE html>
{{end}}
{{if $subAction.Arguments}}
<div class="arguments">Arguments: {{toJSON $subAction.Arguments}}</div>
<div class="arguments">Arguments: {{safeHTML (toJSON $subAction.Arguments)}}</div>
{{end}}
{{if $subAction.Requests}}
@@ -1143,7 +1150,7 @@ const htmlTemplate = `<!DOCTYPE html>
</div>
<div class="log-message">{{$logEntry.Message}}</div>
{{if $logEntry.Data}}
<div class="log-data">{{toJSON $logEntry.Data}}</div>
<div class="log-data">{{safeHTML (toJSON $logEntry.Data)}}</div>
{{end}}
</div>
{{end}}