如何转换 HTML 标签中的转义字符?

我们如何直接转换"\u003chtml\u003e""<html>"?使用 转换"<html>"to"\u003chtml\u003e"很容易json.Marshal(),但json.Unmarshal()相当冗长和繁琐。在 golang 中有没有直接的方法可以做到这一点?


胡说叔叔
浏览 553回答 3
3回答

米琪卡哇伊

您可以使用strconv.Unquote()来进行转换。您应该注意的一件事是,strconv.Unquote()只能取消引号中的字符串(例如,以引号字符"或反引号字符开头和结尾`),因此我们必须手动附加它。例子:// Important to use backtick ` (raw string literal)// else the compiler will unquote it (interpreted string literal)!s := `\u003chtml\u003e`fmt.Println(s)s2, err := strconv.Unquote(`"` + s + `"`)if err != nil {&nbsp; &nbsp; panic(err)}fmt.Println(s2)输出(在Go Playground上试试):\u003chtml\u003e<html>注意:要进行 HTML 文本转义和反转义,您可以使用html包。引用它的文档:包 html 提供转义和取消转义 HTML 文本的功能。但是html包(特别是html.UnescapeString())不解码形式的 unicode 序列\uxxxx,只有&#decimal;或&#xHH;。例子:fmt.Println(html.UnescapeString(`\u003chtml\u003e`)) // wrongfmt.Println(html.UnescapeString(`&#60;html&#62;`))&nbsp; &nbsp;// goodfmt.Println(html.UnescapeString(`&#x3c;html&#x3e;`)) // good输出(在Go Playground上试试):\u003chtml\u003e<html><html>笔记2:您还应该注意,如果您编写这样的代码:s := "\u003chtml\u003e"这个带引号的字符串将被编译器本身取消引用,因为它是一个解释过的字符串文字,所以你不能真正测试它。要在源代码中指定带引号的字符串,您可以使用反引号来指定原始字符串文字,或者您可以使用双引号解释的字符串文字:s := "\u003chtml\u003e" // Interpreted string literal (unquoted by the compiler!)fmt.Println(s)s2 := `\u003chtml\u003e` // Raw string literal (no unquoting will take place)fmt.Println(s2)s3 := "\\u003chtml\\u003e" // Double quoted interpreted string literal&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// (unquoted by the compiler to be "single" quoted)fmt.Println(s3)输出:<html>\u003chtml\u003e

12345678_0001

我认为这是一个普遍的问题。这就是我让它工作的方式。func _UnescapeUnicodeCharactersInJSON(_jsonRaw json.RawMessage) (json.RawMessage, error) {&nbsp; &nbsp; str, err := strconv.Unquote(strings.Replace(strconv.Quote(string(_jsonRaw)), `\\u`, `\u`, -1))&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; return nil, err&nbsp; &nbsp; }&nbsp; &nbsp; return []byte(str), nil}func main() {&nbsp; &nbsp; // Both are valid JSON.&nbsp; &nbsp; var jsonRawEscaped json.RawMessage&nbsp; &nbsp;// json raw with escaped unicode chars&nbsp; &nbsp; var jsonRawUnescaped json.RawMessage // json raw with unescaped unicode chars&nbsp; &nbsp; // '\u263a' == '☺'&nbsp; &nbsp; jsonRawEscaped = []byte(`{"HelloWorld": "\uC548\uB155, \uC138\uC0C1(\u4E16\u4E0A). \u263a"}`) // "\\u263a"&nbsp; &nbsp; jsonRawUnescaped, _ = _UnescapeUnicodeCharactersInJSON(jsonRawEscaped)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // "☺"&nbsp; &nbsp; fmt.Println(string(jsonRawEscaped))&nbsp; &nbsp;// {"HelloWorld": "\uC548\uB155, \uC138\uC0C1(\u4E16\u4E0A). \u263a"}&nbsp; &nbsp; fmt.Println(string(jsonRawUnescaped)) // {"HelloWorld": "안녕, 세상(世上). ☺"}}https://play.golang.org/p/pUsrzrrcDG-希望这可以帮助某人。

慕盖茨4494581

您可以fmt为此范围使用字符串格式化包。fmt.Printf("%v","\u003chtml\u003e")&nbsp;//&nbsp;will&nbsp;output&nbsp;<html>https://play.golang.org/p/ZEot6bxO1H
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go