2016-04-10 15 views
1

"\u003chtml\u003e""<html>"に直接変換するにはどうすればよいですか? "<html>"から"\u003chtml\u003e"への変換はjson.Marshal()を使用すると非常に簡単ですが、json.Unmarshal()は非常に時間がかかり面倒です。ゴランでそれを直接行う方法はありますか?HTMLタグのエスケープ文字を変換するには?

答えて

2

strconv.Unquote()を使用して変換を行うことができます。あなたが知っておくべきこと

一つはstrconv.Unquote()が引用符であるだけに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 { 
    panic(err) 
} 
fmt.Println(s2) 

出力(Go Playground上でそれを試してみてください):

\u003chtml\u003e 
<html> 

注: HTMLテキストエスケープとアンエスケープを行うには、あなたはhtmlパッケージを使用することができます。そのドキュメントを引用する:

パッケージhtmlは、HTMLテキストのエスケープとアンエスケープ機能を提供します。

しかしhtmlパッケージ(具体的html.UnescapeString())形態\uxxxxのみ&#decimal;又は&#xHH;のユニコードシーケンスをデコードしません。

例:

fmt.Println(html.UnescapeString(`\u003chtml\u003e`)) // wrong 
fmt.Println(html.UnescapeString(`&#60;html&#62;`)) // good 
fmt.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 
          // (unquoted by the compiler to be "single" quoted) 
fmt.Println(s3) 

出力:

<html> 
\u003chtml\u003e 
+0

あなたに優しい先生ありがとうございました!あなたは素晴らしいです! :) –

0

をこのスコープには、fmt文字列書式パッケージを使用できます。

fmt.Printf("%v","\u003chtml\u003e") // will output <html> 

https://play.golang.org/p/ZEot6bxO1H

+0

実際には、 '' \ u003chtml \ u003e ''は' fmt'パッケージではなくコンパイラによって引用されません。あなたがバックティックで試してみると、あなたはそれを見るでしょう: ' – icza

関連する問題