ホームページ  >  記事  >  バックエンド開発  >  golangで%をエスケープする方法

golangで%をエスケープする方法

PHPz
PHPzオリジナル
2023-03-30 11:39:152114ブラウズ

近年、インターネット業界の継続的な発展と普及に伴い、プログラミング言語の重要性がますます高まっています。多くのプログラミング言語の中でも、Golang は高速、効率的、安全なパフォーマンス上の利点により開発者に好まれています。

Golang は効率的なパフォーマンスを備えていますが、さまざまな問題や課題に直面することもあります。よくある問題の 1 つは、Golang のエスケープ文字、特にエスケープ文字「%」です。

Golang では、エスケープ文字 "%" を使用する必要がある場合、それを 2 回繰り返す必要があります (つまり "%%")。これは、Golang ではパーセント記号 "%" 自体がa エスケープ文字。したがって、Golang がパーセント記号「%」を含む文字列を処理する場合、それを書式文字列として扱い、それに続くパラメータを書式パラメータとして解析します。

たとえば、Golang で文字列「10%」を出力する必要がある場合は、「fmt.Printf("10%%")」と記述する必要があります。ここで、最初のパーセント記号「%」はエスケープ文字を表し、2 番目のパーセント記号「%」は出力される実際のパーセント記号を表します。

「fmt.Printf("10%")」を直接記述すると、Golang は出力をフォーマットしたいと判断し、出力用に次のパラメーターを探すため、間違った結果が表示されます。これは、Golang がパーセント記号「%」以降の文字を書式設定された文字列の一部として解析し、パーセント記号自体を正しく処理しないためです。

この問題と同様に、URL をエンコードする際のパーセント記号の問題という一般的なエラーがあります。 HTTP リクエストでは、URL 内のパーセント記号は一般にエスケープ文字を表し、一部の特殊文字またはバイトを特別にエンコードされた文字列に変換します。たとえば、 はスペースを表し、: はコロンを表します。

Golang では、URL エンコード時にパーセント記号の問題も発生します。エンコードに Golang 独自の URL エンコード機能を使用する場合は、パーセント記号のエスケープにも注意する必要があります。たとえば、「net/url」の Encode 関数を使用して、Golang で文字列をエンコードします。

import "net/url"

encodeStr := url.QueryEscape("http://www.baidu.com/?query=测试&name=百度")
fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D%E7%99%BE%E5%BA%A6

ご覧のとおり、Golang はパラメータ内のすべての特殊文字をエスケープし、パーセント数値を使用してエンコードします。

ただし、前述のパーセント記号「%」などのカスタム エスケープ文字を導入する場合、Golang ではデコード エラーが発生します。例えば、以下のコードはエラーとなります:

import "net/url"

encodeStr := url.QueryEscape("http://www.baidu.com/?query=测试&name=10%")
fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D10

ご覧のとおり、エンコード結果の「10%」のうち「10」だけが残っており、デコード中に文字が失われ、プログラムが停止してしまいます。 ~ エラーが発生しました。

この状況の解決策も非常に簡単で、エスケープする必要がある文字を他の文字に置き換えるだけです。たとえば、パーセント記号「%」を「%」(パーセント記号の URL エンコード) に置き換えます。

import "net/url"
import "strings"

encodeStr := url.QueryEscape(strings.Replace("http://www.baidu.com/?query=测试&name=10%", "%", "%25", -1))
fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D10%25

このようにして、エンコード結果は正しくデコードされます。

一般に、Golang のエスケープ文字「%」には特別な注意が必要で、正しく使用するには 2 回繰り返す必要があります。 URL をエンコードするときに、エスケープにパーセント記号を使用する必要がある場合は、デコード エラーを避けるために特別な処理が必要です。この方法によってのみ、Golang を最大限に活用し、予期しないエラーを回避し、コードをより堅牢かつ効率的にすることができます。

以上がgolangで%をエスケープする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。